迭代时列表索引超出范围错误列表减少

时间:2017-04-29 12:31:49

标签: python list

我认为我收到错误是因为在循环迭代期间列表的范围会减少。我在一个大型列表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),但应该相同。

2 个答案:

答案 0 :(得分:1)

  1. 根据ufields的定义方式,您可以使用if mega4[i][j] in ufields消除最内层的循环。

  2. 您可以在此循环中修改mega4而不是修改想要消除的元素的列表,然后在之后进行实际消除(循环覆盖候选人名单而不是mega4本身。)

答案 1 :(得分:1)

更简单的方法:

result = [[sub for sub in item if sub] for item in mega4]

你的方式没有用,因为你在迭代时编辑列表。