使用一组存储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中。
什么它不工作?这通常有助于看到尝试解决问题。 –