0

我最近在这里问了一个问题:如何查找 int 是否在数组数组中?并且解决方案效果很好。我正在尝试编写代码,如果另一个数组不包含它,它将从数组中删除一个 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[] 应该是numbers = [2, 4]. 然而,上面的循环不断产生错误exceptions.IndexError: list index out of range,但我不明白为什么会不断抛出错误。任何人都可以帮助解决这个问题吗?

4

2 回答 2

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]
于 2013-02-13T16:50:13.120 回答
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]
于 2013-02-13T16:54:57.433 回答