我正在尝试创建无需替换的绘制,并将每个绘制的结果输出为文本文件。该列表位于一个单独的文件中,我想为循环的每次迭代重新导入它
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。相反,我发现每次弹出一个数字时,每个循环迭代的列表都会变小。为什么会发生这种情况,我怎么能绕过它呢?
谢谢。
答案 0 :(得分:4)
您必须使用列表的浅表副本:
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
答案 1 :(得分:0)
如图所示here当在列表中调用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]