1. 程式人生 > >python進階學習筆記2-迴圈

python進階學習筆記2-迴圈

作者: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()
enumerate()可以在每次迴圈中同時得到下標和元素:
for (index,char) in enumerate(S):
print(index,char)
輸出:0 a
1 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()
如果你有多個等長的序列,然後想要每次迴圈時從各個序列分別取出一個元素,可以利用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 a
2 8 b
3 7 c

06、迴圈物件

  • 迴圈物件

迴圈物件是這樣一個物件,它包含有一個next()方法(__next__()方法,在python 3x中), 這個方法的目的是進行到下一個結果,而在結束一系列結果之後,舉出StopIteration錯誤

當一個迴圈結構(比如for)呼叫迴圈物件時,它就會每次迴圈的時候呼叫next()方法,直到StopIteration出現,for迴圈接收到,就知道迴圈已經結束,停止呼叫next()。

假設我們有一個test.txt的檔案:

1234
abcd
efg

我們執行一下python命令列:


open()返回的是一個迴圈物件,包含有__next__()方法。__next__()每次返回新一行的內容,達到檔案末尾時返回StopIteration。這樣,我們相當於手工進行了迴圈。

自動進行的話,就是:

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)