python中循环迭代语句_python条件与循环-循环
1 while語句
while用于實現(xiàn)循環(huán)語句,通過判斷條件是否為真,來決定是否繼續(xù)執(zhí)行。
1.1 一般語法
語法如下:
while expression:
suite_to_repeat
1.2 計數(shù)
1 2
3 >>> cnt =04
5 >>> while(cnt < 9):6
7 ... print 'the index is', cnt8
9 ... cnt += 1
10
11 ...12
13 the index is014
15 the index is 1
16
17 the index is 2
18
19 the index is 3
20
21 the index is 4
22
23 the index is 5
24
25 the index is 6
26
27 the index is 7
28
29 the index is 8
代碼塊里包含print和自增語句,將被重復(fù)執(zhí)行,知道cnt不下于9。
1.3 無限循環(huán)
while True:
suite_to_repeat
條件表達式一直為真。
2? for語句
for語句是python提供的另一個循環(huán)機制,可以用于遍歷序列,可以用在列表解析和生成器表達式中。
2. 1 一般語法
for循環(huán)會訪問一個可迭代對象(例如序列或疊加器)中的所有元素,并在所有條目處理過后結(jié)束循環(huán)。語法如下:
for iter_var in iterable:
suite_to_repeat
每次循環(huán),iter_var迭代變量被設(shè)置為可迭代對象(序列、迭代器或其他支持迭代的對象)的當前元素,提供給suite_to_repeat語句塊使用。
2.2 用于序列類型
主要介紹for循環(huán)迭代不同的序列對象:字符串、列表及元組。
迭代序列的三種方法:
(1)通過序列項迭代
每次迭代,eachName變量都被設(shè)置為列表中特定的某個元素。
(2)通過序列索引迭代
>>> namelist = ['Bob', 'Lisa', 'Henry']
>>> for nameIndex in range(len(namelist)):
... print namelist[nameIndex]
...
Bob
Lisa
Henry
使用len()函數(shù)獲取序列長度,使用range()函數(shù)創(chuàng)建了要迭代的序列。
(3)使用項和索引迭代
使用內(nèi)建的enumerate()函數(shù)
>>> namelist = ['Bob', 'Lisa', 'Henry']
>>> for i, eachName in enumerate(namelist):
... print i,eachName
...
0 Bob
1 Lisa
2 Henry
3 range()內(nèi)建函數(shù)
range()完整語法如下:
range([start,] stop[, step])
range()會返回一個包含所有k的列表(start<=k
>>> range(3, 7)
[3, 4, 5, 6]
4 與序列相關(guān)的內(nèi)建函數(shù)
sorted()、reversed()、enumerate()、zip()
reversed():返回一個反序訪問的迭代器;
1 >>> namelist = ['Bob', 'Lisa', 'Henry']2
3 >>> years = [1978, 1989, 1990, 2003]4
5 >>> for name insorted(namelist):6
7 ... printname,8
9 ...10
11 Bob Henry Lisa12
13 >>>namelist14
15 ['Bob', 'Lisa', 'Henry']16
17 >>> for name inreversed(namelist):18
19 ... printname,20
21 ...22
23 Henry Lisa Bob24
25 >>> for i, name inenumerate(namelist):26
27 ... printi, name28
29 ...30
31 0 Bob32
33 1Lisa34
35 2Henry36
37 >>> for name, year inzip(namelist, years):38
39 ... printyear, name40
41 ...42
43 1978Bob44
45 1989Lisa46
47 1990 Henry
5 break語句
break語句用于結(jié)束當前循環(huán)跳轉(zhuǎn)到下條語句。
6 continue語句
當遇到continue語句時,程序終止當前循環(huán),并忽略剩余的語句,然后回到循環(huán)的頂端。在開始下一次迭代前,如果是條件循環(huán)(while循環(huán)),將驗證條件表達式;如果是迭代循環(huán)(for循環(huán)),驗證是否還有元素可以迭代,只有在驗證成功的情況下,才開始下一次迭代。
>>> valid =False>>> count = 3
>>> while count >0:
... input= raw_input('Enter passsword:')
...for eachPasswd inpasswdList:
...if input ==eachPasswd:
... valid=True
...break...if notvalid:
...print "invalid input"... count-= 1...continue...else:
...break
7 pass語句
pass語句不做任何事情(即NOP,No Operation,無操作),用于在需要有語句塊的地方不寫任何語句。
8 迭代器和iter()函數(shù)
從根本上來說,迭代器就是有一個next()方法的對象,而不是通過索引來計數(shù)。當你或是一個循環(huán)機制需要下一項時,調(diào)用迭代器的next()方法就可以獲得它。
迭代器為類序列對象提供了一個類序列的接口,它們是一組數(shù)據(jù)結(jié)構(gòu),可以利用它們的索引從0開始一直"迭代"到序列的最后一個條目。
8.1 使用迭代器
(1)序列
>>> i = iter(myTuple)
>>> i.next()
123
>>> i.next()
'abc'
>>> i.next()
45.600000000000001
>>> i.next()
Traceback (most recent call last):
File "", line 1, in
StopIteration
序列會自動的產(chǎn)生它們字節(jié)的迭代器。
for I in seq:
do_something_to(i)
(2)字典
字典也是可迭代的python數(shù)據(jù)類型。字典的迭代器會遍歷它的鍵(key)。語句for eachKey in myDict.keys()可以縮寫為for eachKey in myDict。
>>> myDict = {'a':10, 'b':20, 'c':30}
>>> for eachKey in myDict:
... print eachKey, myDict[eachKey]
...
a 10
c 30
b 20
另外,python還有三個新的內(nèi)建字典方法來定義迭代:myDict.iterkeys()(通過鍵迭代)、myDict.itervalues()(通過值迭代)及myDict.iteritems()(通過鍵-值對迭代)。
(3)文件
文件對象生成的迭代器會自動調(diào)用readline()方法,這樣循環(huán)可以訪問文本文件的所有行,就可以使用for eachline in myFile替換for eachline in myFile.readlines()
>>> myFile = open('testfile.txt')
>>> for eachline in myFile:
... print eachline
...
8.2 創(chuàng)建迭代器
對一個對象調(diào)用iter()就可以得到它的迭代器。語法如下:
iter(obj)
iter(func, sentinel)
如果傳遞一個參數(shù)給iter(),會檢查傳遞的參數(shù)是不是一個序列,如果是,根據(jù)索引從0一直迭代到序列結(jié)束。如果是傳遞的兩個參數(shù)給iter(),會重復(fù)的調(diào)用func,直到迭代器的下個值等于sentinel。
9 列表解析
列表解析可用于動態(tài)的創(chuàng)建列表,語法如下:
[expr for iter_var in iterable]
前面的expr應(yīng)用于序列的每個成員,最后的結(jié)果值是該表達式產(chǎn)生的列表。迭代變量并不需要是表達式的一部分。
>>> [x**2 for x in range(6)]
[0, 1, 4, 9, 16, 25]
還可以和if表達式結(jié)合使用,擴展語法如下:
[expr for iter_var in iterable if cond_expr]
這個語法會過濾或"捕捉"滿足條件表達式cond_expr的序列成員。
>>> [x for x in range(6) if x % 2]
[1, 3, 5]
(1)舉例:矩陣樣例
如一個3行5列的矩陣
>>> [(x+1, y+1) for x in range(3) for y in range(5)]
[(1, 1), (1, 2), (1, 3), (1, 4), (1, 5), (2, 1), (2, 2), (2, 3), (2, 4), (2, 5), (3, 1), (3, 2), (3, 3), (3, 4), (3, 5)]
10 生成器表達式
生成器表達式是列表解析的一個擴展。生成器是特定的函數(shù),允許你返回一個值,然后"暫停"代碼的執(zhí)行,稍后恢復(fù)。
列表解析的不足是必須生成所有的數(shù)據(jù),用以創(chuàng)建整個列表。生成器的基本語法和列表相似,不過不是真正的創(chuàng)建數(shù)字列表,而是返回一個生成器,這個生成器每次計算出一個條目后,把這個條目"產(chǎn)生"(yield)出來。
生成器表達式如下:
(expr for iter_var in iterable if cond_expr)
(1)舉例:交叉配對樣例
>>> rows = [1, 2, 3, 17]
>>> defcols():
... yield 56... yield 2... yield 1
>>> x_product_pairs = ((i, j) for i in rows for j incols())
>>> for pair inx_product_pairs:
... printpair
...
(1, 56)
(1, 2)
(1, 1)
(2, 56)
(2, 2)
(2, 1)
(3, 56)
(3, 2)
(3, 1)
(17, 56)
(17, 2)
(17, 1)
(2)重構(gòu)樣例
獲取文件中長度最大的行:
1 f = open('/etc/motd','r')2
3 longest = max(len(x.strip()) for x inf)4
5 f.close()6
7 return longest
簡化如下:
1 return max(len(x.strip()) for x in open('/etc/motd'))
總結(jié)
以上是生活随笔為你收集整理的python中循环迭代语句_python条件与循环-循环的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python str转dict_在pyt
- 下一篇: java dictionary 实例化_