python高階學習筆記2 迴圈

2021-08-14 10:49:41 字數 2093 閱讀 4540

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

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):

等價於

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...