資料內(nèi)容:
2.2 for 語(yǔ)句
在 python 中的 for 語(yǔ)句可能有以前你在 C 或者 pascal 中所用的有點(diǎn)小差別。她既不像
Pascal 語(yǔ)言中常常遍歷數(shù)組的算法過(guò)程,也不像在 C 語(yǔ)言中給用戶自己定義遍歷步驟或模糊
條件的能力,python 中的 for 語(yǔ)句可以按照元素在序列(列表或者字符串)中出現(xiàn)的順序逐
步地遍歷它們。例如:
>>> # Measure some strings:
... a = [’cat’, ’window’, ’defenestrate’]
>>> for x in a:
... print(x, len(x))
...
cat 3
window 6
defenestrate 12
在循環(huán)語(yǔ)句中修改正在遍歷的序列是不安全的(這種情況僅僅發(fā)生在可變類型中,如列表)。
如果你需要修改你正在遍歷的列表(例如,想復(fù)制選中項(xiàng))你必須首先復(fù)制 list。然后利用
分片符號(hào)很方便實(shí)現(xiàn)它。
>>> for x in a[:]: # make a slice copy of the entire list
... if len(x) > 6: a.insert(0, x)
...
>>> a
[’defenestrate’, ’cat’, ’window’, ’defenestrate’]
2.3 range()方法
如果你想迭代一個(gè)數(shù)字序列,內(nèi)置方法 range()可以很方便實(shí)現(xiàn)它。它可以生成連續(xù)
的數(shù)字:
>>> for i in range(5):
... print(i)
...
0
1
2
3
4
方法中給出的結(jié)點(diǎn)不是產(chǎn)生序列中的一部分。Range(10)就是產(chǎn)生為長(zhǎng)度為 10 序列中每個(gè)元
素產(chǎn)生 10 個(gè)合法的索引值。該方法也可以讓范圍從其他數(shù)字開(kāi)始,或者指定不同的增長(zhǎng)數(shù)
(甚至是負(fù)數(shù),有時(shí)稱這為階梯)。
range(5, 10)
5 through 9
range(0, 10, 3)
0, 3, 6, 9
range(-10, -100, -30)
-10, -40, -70
為了迭代序列的目錄,你可以結(jié)合 range()和 len()結(jié)合起來(lái),例如:
>>> a = [’Mary’, ’had’, ’a’, ’little’, ’lamb’]
>>> for i in range(len(a)):
... print(i, a[i])
...
0 Mary
1 had
2 a
3 little
4 lamb
但是,在許多情況下,運(yùn)用 enumerate()方法會(huì)更加方法,具體參照 Looping Techniques.
如果你想打印一個(gè)范圍,奇怪的現(xiàn)象將會(huì)出現(xiàn)。
>>> print(range(10))
range(0, 10)
在很多情況下利用 range()返回對(duì)象表現(xiàn)像列表,但實(shí)際上它不是列表。盡管當(dāng)你迭代期望
序列時(shí),它能夠依次地返回元素,但是它沒(méi)有真正生成列表,因此節(jié)省空間。
我們可以把對(duì)象成為是可迭代的,就是指它很適合作為預(yù)期得到有序元素事情的方法和結(jié)構(gòu)
的對(duì)象。 我們已經(jīng)知道 for 語(yǔ)句就是這種迭代器。方法 list()也算一個(gè),它可以產(chǎn)生有序列
表。
>>> list(range(5))
[0, 1, 2, 3, 4]
稍后我們會(huì)看到更多能返回迭代對(duì)象和把迭代對(duì)象當(dāng)做內(nèi)容的方法。
2.4 break 和 continue 語(yǔ)句和在循環(huán)中的 else 子句
與在 C 語(yǔ)言中一樣,Break 語(yǔ)句將會(huì)跳出離它最近的 for 或者 while 循環(huán)。
Continue 語(yǔ)句也是從 C 中借鑒而來(lái),繼續(xù)開(kāi)始循環(huán)的下一步。
循環(huán)語(yǔ)句中有時(shí)含有 else 的子句。當(dāng)通過(guò)遍歷結(jié)束導(dǎo)致循環(huán)終止(for)或者當(dāng)循環(huán)條件變
為 false(如 while),它將會(huì)執(zhí)行。但是當(dāng)循環(huán)被 break 語(yǔ)句所終止,它不會(huì)被執(zhí)行。下面通
過(guò)查詢質(zhì)數(shù)這個(gè)例子來(lái)學(xué)習(xí):