05、迴圈
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 a
1 b2 c
3 d4 e
5 f6 g
7 h8 i
9 j10 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 a
2 8 b
3 7 c
06、迴圈物件
迴圈物件是這樣乙個物件,它包含有乙個
next()方法
(__next__()
方法,在
python 3x中
), 這個方法的目的是進行到下乙個結果,而在結束一系列結果之後,舉出
stopiteration錯誤
。 當乙個迴圈結構(比如for)呼叫迴圈物件時,它就會每次迴圈的時候呼叫next()方法,直到stopiteration出現,for迴圈接收到,就知道迴圈已經結束,停止呼叫next()。
假設我們有乙個test.txt的檔案:
1234abcd我們執行一下python命令列:efg
open()返回的是乙個迴圈物件,包含有__next__()方法。__next__()每次返回新一行的內容,達到檔案末尾時返回stopiteration。這樣,我們相當於手工進行了迴圈。
自動進行的話,就是:
for line in open('test.txt','r'):
print(line)
在這裡,for結構自動呼叫__next()__方法,將該方法的返回值賦予給line。迴圈知道出現stopiteration的時候結束。
l=
for x in range(10):
等價於
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)
Python 學習筆記十四 迴圈高階
在python中,for迴圈後的in跟隨乙個序列的話,迴圈每次使用的序列元素,而不是序列的下標。我們繼續開發range的功能,以實現下標對迴圈的控制 s abcdefghj for i in range 0,len s 3 print i,s i 在該例子中,我們利用len 函式和range 函式,...
python學習筆記2(高階操作)
1.python使用lambda表示式來建立匿名函式 lambda的主體是乙個表示式,只能在其中封裝有限的邏輯進去。使用形式為 lambda argumen list expression cheng lambda x,y x y print cheng 8,9 2.map是python的高階函式,...
Python高階學習(2)
import random import collections 產生隨機數字的序列 numbers random.randint 1,20 for in range 60 print numbers 給出整個列表中數值的統計資訊 counter collections.counter number...