為什麼python中不建議在for迴圈中修改列表?

時間 2021-06-03 22:55:08

1樓:

「扁平結構比巢狀結構更好」 – 《Python之禪》

比如 list(map(lambda x:4 if x==3 else x,a))

如果一定要用for:

a = [1, 2, 3, 4, 5, 6]3變成4

[4 if x==3 else x for x in a]b = [1, 2, 4, 4, 5, 6][x for x in b if x != 4]也是可以的。。

2樓:方小圓

樓上@mouser 已經從iterator的角度解釋清楚了這個問題為何會出現:在修改過程中,原list的長度可能會發生變化,導致for-in迴圈的遍歷不夠「到位」(不越界、不漏值)。

小白來補充一點如何解決這個問題吧~

——UCB CS 61A Sp17 第三次project

翻譯過來:把原有的list複製一下,遍歷拷貝的list、但修改原有的list。

num_list=[

1,2,

3,4,

5]print

(num_list

)for

item

innum_list

[:]:

ifitem==2

:num_list

.remove

(item

)else

:print

(item

)print

(num_list

)(附)複製列表的方法:

lst=[1

,2,3

]lst1

=lst

[:]# one way

lst2

=list

(lst

)# another

(^^*)啦啦

在 Python 中,為什麼 type 類物件自身的型別是 type?

你開始接觸Python型別系統的一個非常有趣的分支了。Built in Functions 除了type obj 之外,type還有一種使用方法 type name,bases,dict 這兩個版本都會返回一個type型別的物件。單引數的版本會返回obj的型別 三引數的版本還是會返回一個type型別...

c 中是否不建議使用巨集,為什麼?

gunir 因為巨集這種東西就是簡單的字元替換,而且發生在預編譯階段。有多少人關注預編譯階段的事情。而且巨集定義的常量,當你需要debug的時候完全見不到反彙編資訊,只有一串引數,這時候你就會懵逼。 果凍蝦仁 分場景,題主可能理解有誤。如果是把巨集用來定義常數,那麼不建議使用。如果是其他巨集用法,有...

在Python中,為什麼說如果能用for迴圈就儘量不用while迴圈?

已登出 個人認為這句話不是很合理。首先,我們來理解這兩種迴圈。for迴圈是遍歷完所有的物件後結束,而while迴圈是條件不符合就退出。但在實際的使用中,可以二選一。從題主這句話的角度,我能解釋的就是,由於人的疏忽,while迴圈在使用中可能會陷入死迴圈。但請記住,這是人的問題,不是while迴圈的錯...

為什麼F1賽車比賽中不採用機器裝置更換輪胎?

由於進站換胎的作業過程頗具觀賞性且及其考驗團隊的合作能力,所以進站必須是比賽的一部分,所以進站應該不會採用機器來替代人工,F1是及其講究團隊合作的,個人能力機器能力再強也無法勝過一支訓練有素精良的團隊。 王元豐 說句題外話,2008年法拉利為了提高進站效率,取消了棒棒糖人,改用燈光訊號,結果 但是沒...

為什麼不建議一個物件在多處儲存引用?

既然每個item都存有area,那麼一個item只能對應一個area.包括 null area 是從屬關係.那麼最 優雅 的做法應該是直接讓 itemManager 變成對所有 area 下的 itemList 的封裝,內部用迭代器或索引去轉換. dwing 不建議一個物件在多處儲存引用 的出發點是...