使用一組存儲l2個元素,只是用33替換集合中的元素:
l1=['a','b','c', 'd']
l2= ['a','b','d','f']
st = set(l2)
l1[:] = [33 for ele in l1 if ele in st]
print(l1)
您的代碼不起作用,因爲您正在從要迭代的列表中刪除元素。當你del l[i]
你已經改變了列表的大小,所以l[i]
最初不同於l[i]
在刪除元素後指向的內容。你不應該從你正在迭代的列表中刪除元素,或者從你的輸出中看到錯誤的元素最終會被刪除。
如果你開始與你原來的列表:
l1=['a','b','c', 'd']
index 0 == a
index 1 == b
index 2 == c
index 3 == d
然後,如果你刪除c
然後d
是指數2
所以你最終錯過d
。
你只需要前和刪除後添加打印:
for (i, wor) in enumerate(l1):
if wor in l2:
l1[i] = 33
else:
print(l1[i],l1)
del l1[i]
print(l1[i],l1)
c [33, 33, 'c', 'd']
d [33, 33, 'd']
如果添加g
到L1,你會看到一個比較明顯的錯誤:
l1=['a','b', "c", 'd',"g"]
l2= ['a','b','d','f']
for (i, wor) in enumerate(l1):
if wor in l2:
l1[i] = 33
else:
print(l1[i],l1)
del l1[i]
print(l1[i],l1)
print(l1)
c [33, 33, 'c', 'd', 'g']
d [33, 33, 'd', 'g']
g [33, 33, 'd', 'g']
Traceback (most recent call last):
File
..........
print(l1[i],l1)
IndexError: list index out of range
因爲你已經改變了大小不再是l[4]
。你的代碼沒有錯誤,只是因爲l1的最後一個元素碰巧在l2中。
什麼它不工作?這通常有助於看到嘗試解決問題。 –