我认为我收到错误是因为在循环迭代期间列表的范围会减少。我在一个大型列表mega4
中有95个嵌套列表,我试图用if和else删除一些字符串。列表ufields
由18个字符串组成。
>>> for i in range(len(mega4)):
... for j in range(len(mega4[i])):
... for f in ufields:
... if (f in mega4[i][j]) is False:
... mega4[i].remove(mega4[i][j])
... else:
... pass
...
Traceback (most recent call last):
File "<stdin>", line 4, in <module>
IndexError: list index out of range
第四行基本上是询问mega4[i]
中的每个元素是否包含ufields
中的每个字符串,在这种情况下如何删除mega4[i][j]
?
编辑:
我按照下面的评论尝试建立一个新列表,但这个似乎不起作用
>>> mega5 = []
>>> for i in range(len(mega4)):
... for f in ufields:
... mega5.append([x for x in mega4[i] if f in x is True])
len(mega5)
大于len(mega4)
,但应该相同。
答案 0 :(得分:1)
根据ufields
的定义方式,您可以使用if mega4[i][j] in ufields
消除最内层的循环。
您可以在此循环中修改mega4
而不是修改想要消除的元素的列表,然后在之后进行实际消除(循环覆盖候选人名单而不是mega4
本身。)
答案 1 :(得分:1)
更简单的方法:
result = [[sub for sub in item if sub] for item in mega4]
你的方式没有用,因为你在迭代时编辑列表。