99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
2018-10-18 閱讀量: 972
在遍歷列表的同時(shí)又在修改這個(gè)列表?

下面這個(gè)例子中的代碼應(yīng)該比較明顯了:

odd = lambda x : bool(x % 2)
numbers = [n for n in range(10)]
for i in range(len(numbers)):
... if odd(numbers[i]):
... del numbers[i]

# 這不對(duì)的:在遍歷列表時(shí)刪掉列表的元素。
...
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
IndexError: list index out of range

遍歷一個(gè)列表或者數(shù)組的同時(shí)又刪除里面的元素,對(duì)任何有經(jīng)驗(yàn)的軟件開發(fā)人員來說這是個(gè)很明顯的錯(cuò)誤。但是像上面的例子那樣明顯的錯(cuò)誤,即使有經(jīng)驗(yàn)的程序員也可能不經(jīng)意間在更加復(fù)雜的程序中不小心犯錯(cuò)。

所幸,Python集成了一些優(yōu)雅的編程范式,如果使用得當(dāng),可以寫出相當(dāng)簡化和精簡的代碼。一個(gè)附加的好處是更簡單的代碼更不容易遇到這種“不小心在遍歷列表時(shí)刪掉列表元素”的bug。例如列表推導(dǎo)式(list comprehensions)就提供了這樣的范式。再者,列表推導(dǎo)式在避免這樣的問題上特別有用,接下來這個(gè)對(duì)上面的代碼的重新實(shí)現(xiàn)就相當(dāng)完美:

odd = lambda x : bool(x % 2)
numbers = [n for n in range(10)]
numbers[:] = [n for n in numbers if not odd(n)]
# 啊,這多優(yōu)美
numbers
[0, 2, 4, 6, 8]

0.0000
4
關(guān)注作者
收藏
評(píng)論(0)

發(fā)表評(píng)論

暫無數(shù)據(jù)
推薦帖子