繁体   English   中英

迭代式在python中生成一个随机排列的列表

[英]Iterative grow a shuffled list in python

我试图以迭代的方式对4个元素进行列表重排,然后将经过重排的列表追加到不断增长的列表中。 结果将是一个长度为4个元素的倍数的列表,每四个元素是我原始列表的某种组合。

我的代码是

import random
list1 = ['X','Y','Z','Q']
list2 = []
for drop in range(0,72/4):
     random.shuffle(list1)
     list2.append(list1)

我似乎遇到的问题是,list2会一遍又一遍地成为相同的shuffle版本。

示例清单2:['Q','X',Z','Y','Q','X',Z','Y','Q','X',Z','Y',。 ..]

我想你想写

list2.extend(list1)

否则,您将一遍又一遍地将对象list1的相同实例添加到list2。

将列表追加到另一个列表时,并不是在复制该列表,而是在原始列表中追加了另一个引用。 您尝试进行的所有添加实际上都是对同一对象的引用,对一个对象的修改就是对所有对象的修改。

这是这个令人惊讶的结果的证明。

>>> list1 = ['X', 'Y', 'Z', 'Q']
>>> list2 = []
>>> list2.append(list1)
>>> list2.append(list1)
>>> list2
[['X', 'Y', 'Z', 'Q'], ['X', 'Y', 'Z', 'Q']]
>>> list2[0][0] = 'A'
>>> list2
[['A', 'Y', 'Z', 'Q'], ['A', 'Y', 'Z', 'Q']]
>>> list1[0] = 'B'
>>> list2
[['B', 'Y', 'Z', 'Q'], ['B', 'Y', 'Z', 'Q']]

在适当位置混排list1时,将混排list1的所有实例。 当您将list1附加到list2时,您只是一次又一次地拖移相同的列表。

尝试使用Deepcopy

import random, copy
list1 = [1,2,3,4]
list2 = []
for i in xrange(10):
    random.shuffle(list1)
    list2.append(copy.deepcopy(list1))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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