我最近在这里问了一个问题:How do I find if an int is in array of arrays?并且解决方案效果很好。我正在尝试编写代码,如果另一个数组不包含它,将从数组中删除一个int。我试图使用的循环是:
for index in range(len(numbers)):
if not any(numbers[index] in elem[:2] for elem in numbers2):
numbers.remove(numbers[index])
说出numbers = [1, 2, 4]
和numbers2 = [[4,5,6], [2,8,9]]
然后在循环之后,数字[]应为numbers = [2, 4]
。然而,上面的循环不断产生错误exceptions.IndexError: list index out of range
,但我不明白为什么错误会被抛出。任何人都可以帮忙解决这个问题吗?
答案 0 :(得分:4)
问题是len(numbers)
仅在循环开始时评估过一次。
我会像这样改写整个事情:
In [12]: numbers = [1, 2, 4]
In [13]: numbers2 = [[4,5,6], [2,8,9]]
In [15]: n2s = set(reduce(operator.add, (n[:2] for n in numbers2)))
In [17]: [n for n in numbers if n in n2s]
Out[17]: [2, 4]
答案 1 :(得分:1)
创建时间列表并保存要删除的位置,然后在完成所有迭代后删除这些位置中的项目。请记住以相反的顺序删除以在删除时保留索引号。
to_remove = []
for index, number in enumerate(numbers):
if not any(number in elem[:2] for elem in numbers2):
to_remove.append(index)
for index in reversed(to_remove):
del numbers[index]