1. 程式人生 > >Python叠代和列表生成器

Python叠代和列表生成器

false 限定 表達 div size abc 函數 如何判斷 索引

使用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]

Python叠代和列表生成器