Python迭代和列表生成器
Python迭代和列表生成器
時間:2017-09-27 19:14:01 閱讀:274 評論:0 收藏:0 [點我收藏+]
標籤:其他 模組 rabl 第一個 型別 fit 首字母 表達 log
使用for迴圈遍歷list和tuple,這種遍歷成為迭代
在如C語言中都是通過下標拿到值,for...in這種方式其實是相同的。
在函式的一節,這樣說--->‘求和函式sum(),sum(iterable,start),第一個引數必須是可以迭代物件,listtuple。’ 可迭代物件為list,tuple
所以使用for遍歷時,物件是要可以迭代的。
如何判斷一個物件能不能迭代?
Python的collections模組的Iterable可以判斷是否可以迭代; isinstance()函式用來判斷某種資料型別是否是已知的型別
>>>isinstance(1,int)
Ture
>>>isinstance(‘abc‘,str)
Ture
>>>isinstance(3.14,float)
Ture
>>>isinstance(‘3.14‘,float)
False
#####################################
from collections import Iterable
>>>isinstance([1,2,3,4,5],Iterable)
Ture
>>>isinstance(12345,Iterable)
False
>>>isinstance((1,2,3,4,5),Iterable)
Ture
>>>isinstance({‘name‘:‘jkl‘,‘age‘:15},Iterable)
Ture
所以dict能使用for遍歷處key或values或key,values
dict是一個能迭代的物件,具體的看使用環境
如何讓一個list或者tuple同時顯示下標和元素?
Python提供了enumerate()函式,把list或者tuple變成了:索引-元素對,就像鍵值對
t = [1,2,3,4,5]
for k,v in enumerate(t)
print(k,‘-‘,v)
0-1
1-2
2-3
3-4
4-5
5-6
列表生成式
如要生成一個L = [2,4,6,8,10,12,14,......100]這樣的list;
可以切片取出:
#這裡使用list()把range()函式生成的序列數轉成list,tuple也以同樣的方法
>>>L = list(range(1,101))
>>>L1 = L[1::2]
>>>L1
[2,4,6,8,10,........]
還可以使用函式:
def create():
L = []
for x in range(1,51):
L.append(x*2)
print(L)
return
create()
[2,4,6,8,10,12,......100]
以上程式碼都挺麻煩,使用列表生成式一行就可以解決掉
[x * 2 for x in range(1,101)]
[2,4,6,8,10,.....100]
生成式還可以兩個for迴圈巢狀,生成了一個全排列
[m * n for m in range(1,3) for n in range(1,5)]
[1,2,3,4,2,4,6,8]
迭代表達式
t = (1,2,3,4,5,6)
[k for k in t]
[1,2,3,4,5,6]
加上其他的限定條件:一個list包含多個數據型別,取出字串並將首字母大寫
L = [‘grant‘,‘fitz‘,15,3.14,None]
[x.title() for x in L if instance(x,str)]
[‘Grant‘,‘Fitz‘]