我试图了解为什么我似乎无法用循环删除列表中的每个索引

suf*_*ffa 0 python list

我不确定为什么我的列表没有删除基于第二个List索引的每个char.以下是代码:

L1 = ['e', 'i', 'l', 'n', 's', 't']
L2 = ['e', 'i', 'l', 'n', 's', 't']

for n_item in range(len(L1)):
    if L1[n_item] in L2:
     del L2[n_item]
Run Code Online (Sandbox Code Playgroud)

以下是我得到的错误:

 Traceback (most recent call last):
 File "<pyshell#241>", line 3, in <module>
 del L2[n_item]
 IndexError: list assignment index out of range
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助 ....

Gar*_*tty 5

当您删除之前的项目时,列表会变短,因此后面的标记不存在.这是Python中索引迭代的一个症状 - 这是一个糟糕的主意.这不是Python的设计方式,通常会产生难以理解,缓慢,不灵活的代码.

相反,使用列表推导来构造新列表:

[item for item in L1 if item not in L2]
Run Code Online (Sandbox Code Playgroud)

请注意,如果L2很大,则可能需要先将其设置为集合,因为对集合的成员资格测试要快得多.

  • 并且,如果有必要,您还可以使用新的列表替换旧列表:`L2 [:] = [...]`.这使得事情与OP试图做的事情保持一致,但也消除了在每个"del"之后移动元素的惩罚. (2认同)