Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在循环迭代中重新初始化列表?_Python - Fatal编程技术网

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)
使用just
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

您必须使用列表的浅表副本:

x=  numberlist.listX[:]  #or list(numberlist.listX)
使用just
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
随机导入
计数器=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仍然引用相同的列表列表中,带有切片操作符的浅拷贝为我修复了它。