Python 如何在循环迭代中重新初始化列表?
我尝试在不替换的情况下创建绘图,并将每个绘图的结果输出为文本文件。列表在一个单独的文件中,我想为循环的每个迭代重新导入它Python 如何在循环迭代中重新初始化列表?,python,Python,我尝试在不替换的情况下创建绘图,并将每个绘图的结果输出为文本文件。列表在一个单独的文件中,我想为循环的每个迭代重新导入它 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)
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
随机导入
导入数字列表
计数器=0
抽签数=100
而(计数器您必须使用列表的浅表副本:
x= numberlist.listX[:] #or list(numberlist.listX)
使用justx=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
您必须使用列表的浅表副本:
x= numberlist.listX[:] #or list(numberlist.listX)
使用justx=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
随机导入
计数器=0
抽签数=100
xlist=['a341','c32k','42b']
而(counter如列表中调用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
随机导入
计数器=0
抽签数=100
xlist=['a341','c32k','42b']
而(甚至更好,def listX():返回列表(['a341','c32k','42b])
甚至更好,def listX():返回列表(['a341','c32k','42b])
谢谢你的帮助,但根据你上面的评论,你的代码与我的代码存在相同的问题:x仍然引用相同的列表,切片操作符的浅拷贝为我修复了它。谢谢你的帮助,但根据你上面的评论,你的代码与我的代码存在相同的问题:x仍然引用相同的列表列表中,带有切片操作符的浅拷贝为我修复了它。