日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python【5】-生成式,生成器

發布時間:2024/1/17 python 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python【5】-生成式,生成器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、條件和循環

1. if語句

if <條件判斷1>:<執行1> elif <條件判斷2>:<執行2> else:<執行4>

例如:

age=5 if age>=18:print 'adult' elif age>=6:print 'teenager' else:print 'kid'

?

一定要注意條件語句結尾的冒號,以及代碼段的縮進。

只要if參數是非零數值、非空字符串、非空list等,就判斷為True,否則為False。

2.循環

range(num):返回0到num-1之間的整數。例如:

print range(5)>>>[0,1,2,3,4]

?

for循環:for x in ...循環就是把每個元素代入變量x,然后執行縮進塊的語句。

s=0 for i in range(101):s+=i print s

?

while循環:只要條件滿足,就不斷循環,條件不滿足時退出循環。

i=1 s=0while(i<=100):s=s+ii=i+1print s

?

3.迭代

dict類型for ..in ..迭代有以下幾種方式:

d={'a':1,'b':2,'c':3}

默認迭代key

for k in d:print k

?

iterkeys()返回key迭代器

for key in d.iterkeys():print key

?

itervalues()返回value迭代器

for value in d.itervalues():print value

?

iteritems()返回鍵值對迭代器

for key,value in d.iteritems():print key+"="+str(value)

?

判斷對象是否可迭代:通過collections模塊的Iterable類型判斷

from collections import Iterable print isinstance(d,Iterable)

?

帶下標迭代:Python內置的enumerate函數可以把一個list變成索引-元素對

l=range(5) for i,value in enumerate(l):print i,value

?

二、生成式

1.列表生成式

列表生成式是python受歡迎的語法之一,通過一句簡潔的語法就可以對一組元素進行過濾,還可以對得到的元素進行轉換處理。語法格式為:

[exp for val in collection if condition]

?

相當于

result=[] for val in collection:if(condition):result.append(exp)

?

我們看個例子:將列表中的字符串轉換為小寫組成新的列表。

L=['Hello',10,'World',None] print [s.lower() for s in L if isinstance(s,str)] 運行結果: ['hello', 'world']

?

2.字典生成式

字典生成式基本格式如下:

{key-exp:val-exp for value in collection if condition}

?

例如:

print {i:i*10 for i in range(1,10) if(i%2==0)}運行結果為: {8: 80, 2: 20, 4: 40, 6: 60}

?

3.集合生成式

集合生成式格式和列表生成式類似,只不過用的是大括號:

{exp for value in collection if condition}

?

例如:統計列表中字符串元素的各種長度。

L=['Hello',10,'World',None,'aa'] print {len(x) for x in L if isinstance(x,str)}運行結果: set([2, 5])

?

4.嵌套列表生成式

嵌套列表生成式要注意for循環的順序。

例如:我們想提取由兩個列表組成的嵌套列表中,含有a的字符串:

L1=[['Cathy','Li'],['Zhang','Wang','Mike','Tom','Jack']] print [name for list in L1 for name in list if name.count('a')>0]運行結果: ['Cathy', 'Zhang', 'Wang', 'Jack']

?

我們還可以將嵌套列表中的數據進行扁平化展現,例如:

L2=[(1,3,5),(2,4,6),(100,200)] print [value for t in L2 for value in t]運行結果: [1, 3, 5, 2, 4, 6, 100, 200]

?

發現語法太簡潔啦!!

三、生成器

在Python中,有一種自定義迭代器的方式,稱為生成器(Generator)。

定義生成器的兩種方式:

1.創建一個generator,只要把一個列表生成式的[]改成(),就創建了一個generator:

l=[x for x in range(1,10)] print lg=(x for x in range(1,10)) print g.next() print g.next()for x in g:print x運行結果: [1, 2, 3, 4, 5, 6, 7, 8, 9] 1 2 3 4 5 6 7 8 9

?

generator保存的是算法,每次調用next(),就計算出下一個元素的值,直到計算到最后一個元素,沒有更多的元素時,拋出StopIteration的錯誤。

2.定義generator的另一種方法。如果一個函數定義中包含yield關鍵字,那么這個函數就不再是一個普通函數,而是一個generator:

def fib(n):a=1b=1i=0;yield ayield bwhile(i<n):a,b=b,a+bi+=1yield bfor x in fib(10):print x運行結果: 1 1 2 3 5 8 13 21 34 55 89 144

?

生成器和普通函數區別:

普通函數是順序執行,遇到return語句或者最后一行函數語句就返回;

而變成generator的函數,在每次調用next()的時候執行,遇到yield語句返回,再次執行時從上次返回的yield語句處繼續執行。

def test():print 1yieldprint 2yieldprint 3yieldt=test() t.next()#運行結果1 t.next()#運行結果2 t.next()#運行結果3

?如需轉載,請標明原文鏈接:http://www.cnblogs.com/janes/

總結

以上是生活随笔為你收集整理的python【5】-生成式,生成器的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。