首页 > 解决方案 > 对于带有变量列表

问题描述

from random import shuffle
k = 1000
T = 0
while k!=0:
    ludzie = [i for i in range(1000)]
    plaszcze = [i for i in range(1000)]
    shuffle(plaszcze)
    for value in range(k):
        if ludzie[value]==plaszcze[value]:
            k = k - 1
            del(ludzie[value])
            del(plaszcze[value])
    T = T + 1
print(T)

我希望我第一次完成循环时,人员列表是一个更新列表,之前使用了 del,外套列表也是如此。然后当我们第二次使用循环时,它会将更新的人与外套进行比较。

不幸的是,会弹出一个错误。

Traceback (most recent call last):
File "", line 9, in <module>
if ludzie[value]==plaszcze[value]:
IndexError: list index out of range.

标签: pythonfor-loop

解决方案


那讲得通。想象一下:

a = [1, 2, 3]
b = [3, 2, 1]

for i in range(3):
    if a[i] == b[i]:
       del a[i]
       del b[i]

什么时候发生i == 2?回答,您尝试访问a[2]不再存在的访问,因为您缩短了列表。

问题是您甚至不需要删除这些值。除了破坏您的代码之外,它没有其他用途。去掉 2 dels 就好了


推荐阅读