繁体   English   中英

如何在循环迭代中重新初始化列表?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM