假設我們嘗試使用以下代碼洗掉串列的所有元素:
a = [1, 2, 3, 4]
for i in a:
a.remove(i)
當然,這不是“允許的”并且會失敗。另一方面,我們可以這樣做:
a = [1, 2, 3, 4]
for i in list(a):
a.remove(i)
這會奏效。所以,我有兩個問題:
- 為什么第二種方法有效?
- 第二種方法是否可以接受并且應該使用?
先感謝您!
uj5u.com熱心網友回復:
第二個代碼有效,因為使用 . 創建了一個新串列list(a)
。然后,您遍歷新串列并從原始串列中洗掉專案。
第二個代碼是可以接受的,因為您沒有遍歷您正在修改的同一個串列。
uj5u.com熱心網友回復:
您可以通過在代碼中添加列印來了解該程序:
a = [1, 2, 3, 4]
for i in a:
print('Deleting: {}'.format(i))
a.remove(i)
print(a)
在您的第一個示例中,回圈從洗掉開始1
,然后移至串列中的第二個元素。但是,由于您已洗掉1
,因此回圈中的下一個元素是串列中的第二個元素,即 now 3
(現在2
是第一個)-因此回圈洗掉了3
. 然后它想洗掉第三個元素,但不再有這樣的元素了。
在第二個示例中,list(a)
實際上創建了一個串列的新實體(與 具有相同的元素a
),因此您實際上要做的是迭代這個新串列的元素,并洗掉 original 中的相應元素a
。由于兩個串列都包含相同的元素 - 中的所有元素a
都將被洗掉。
關于你關于什么被接受的第二個問題 - 這完全取決于你想要實作的目標。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/470674.html