python進階學習筆記2-迴圈
阿新 • • 發佈:2018-12-24
作者:Vamei 出處:http://www.cnblogs.com/vamei
05、迴圈
- range()
S='abcdefghijklmn'
for i in range(0,len(S),2):
print(S[i])
#下限0,上限len(S),步長2
- enumerate()
for (index,char) in enumerate(S):
print(index,char)
輸出:0 a1 b
2 c
3 d
4 e
5 f
6 g
7 h
8 i
9 j
10 k
11 l
12 m
13 n實際上,enumerate()在每次迴圈中,返回的是一個包含兩個元素的(tuple),兩個元素分別賦予index和char
- zip()
ta=[1,2,3]
tb=[9,8,7]
tc=['a','b','c']
for (a,b,c) in zip(ta,tb,tc):
print(a,b,c)
輸出:1 9 a2 8 b
3 7 c
06、迴圈物件
- 迴圈物件
迴圈物件是這樣一個物件,它包含有一個next()方法(__next__()方法,在python 3x中), 這個方法的目的是進行到下一個結果,而在結束一系列結果之後,舉出StopIteration錯誤。
當一個迴圈結構(比如for)呼叫迴圈物件時,它就會每次迴圈的時候呼叫next()方法,直到StopIteration出現,for迴圈接收到,就知道迴圈已經結束,停止呼叫next()。
假設我們有一個test.txt的檔案:
1234
abcd
efg
我們執行一下python命令列:
自動進行的話,就是:
for line in open('test.txt','r'):
print(line)
在這裡,for結構自動呼叫__next()__方法,將該方法的返回值賦予給line。迴圈知道出現StopIteration的時候結束。
- 表推導
等價於L=[] for x in range(10): L.append(x*x)
LL=[x**2 for x in range(10)]#x**2是x的二次方
x1=[1,3,5]
y1=[9,12,13]
LLL=[x**2 for (x,y) in zip(x1,y1) if y>10]
print(LLL)
輸出:[9, 25]生成器生成器的編寫方法和函式定義類似,只是在return的地方改為yield。生成器中可以有多個yield。當生成器遇到一個yield時,會暫停執行生成器,返回yield後面的值。當再次呼叫生成器的時候,會從剛才暫停的地方繼續執行,直到下一個yield。生成器自身又構成一個迴圈器,每次迴圈使用一個yield返回的值。下面是一個生成器:
def gen():
a=100
yield a
a=a*8
yield a
yield 1000
該生成器共有三個yield, 如果用作迴圈器時,會進行三次迴圈。for i in gen():
print(i)