[英]How to reinitialize list in loop iteration?
我正在尝试创建不替换的绘图,并将每个绘图的结果输出为文本文件。 该列表位于单独的文件中,我想在每次循环时重新导入它
import random
import numberlist
counter=0
draws= 100
while (counter<draws):
x= numberlist.listX #this imports a list of strings eg. ['a341','c32k','42b]]
random.shuffle(x)
x.pop()
"""OPERATIONS WITH POPPED VALUE"""
counter += 1
我希望在每次循环迭代开始时将X重新实现为完整的listX。 相反,我发现的是,每次弹出一个数字,每次循环迭代时列表都会变小。为什么会这样,又该如何解决呢?
谢谢。
您必须使用列表的浅表副本:
x= numberlist.listX[:] #or list(numberlist.listX)
仅使用x= numberlist.listX
仅创建对同一对象的新引用。
例:
In [1]: lis=[1,2,3]
In [2]: x=lis
In [3]: x is lis #both point to the same object
Out[3]: True
In [4]: x=lis[:] #create a shallow copy
In [5]: x is lis
Out[5]: False
我认为您可以用以下方式替换while循环:
for item in (random.choice(lis) for _ in xrange(draws)):
#do something with item
如此处所示,当在列表中调用pop时,它将删除列表中给定位置的项目,然后将其返回。
考虑到您正在使用创建对同一对象的新引用
x= numberlist.listX
如上所述,预计该列表在每次循环迭代中都不会具有相同的元素。
我的建议是执行以下操作:
import random
counter=0
draws= 100
xlist = ['a341','c32k','42b']
while (counter<draws):
x = xlist
random.shuffle(x)
print x[-1]
"""OPERATIONS WITH POPPED VALUE"""
counter += 1
哪里
x[-1]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.