python - 对于带有变量列表
问题描述
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.
解决方案
那讲得通。想象一下:
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 del
s 就好了
推荐阅读
- multilingual - Surveymonkey API V3 中受访者的“语言”在哪里
- ansible - 使用 Ansible 更新单个 vhost 文件
- javascript - 如何检查对象是否包含某个键?
- podio - 沙盒中的 Podio 是如何工作的?
- python-3.x - Python dtype 高级复合类型
- python-3.x - 使用 python 查找全球电话运营商
- java - 使用 Volley 预填充房间数据库
- exec - 在鱼壳中保持文件描述符打开
- c# - 从数据库中删除用户项
- python - 模拟一个类实例的函数调用,该类实例是 Python 中另一个类实例的成员