我试图迭代地对一个包含4个元素的列表进行混洗,然后将混洗后的列表添加到一个不断增长的列表中。结果将是一个长度为4个元素的倍数的列表,其中每四个元素就是我的原始列表的某个组合。
我的代码是
import random
list1 = ['X','Y','Z','Q']
list2 = []
for drop in range(0,72/4):
random.shuffle(list1)
list2.append(list1)我似乎遇到的问题是,list2将一次又一次地成为list1的同一个混洗版本。
示例list2:'Q','X',Z','Y','Q','X',Z','Y','Q','X',Z','Y',...
发布于 2012-04-13 23:38:37
我想你是想写
list2.extend(list1)否则,您将一次又一次地将对象list1的相同的实例添加到list2。
发布于 2012-04-13 23:53:43
当您将一个列表附加到另一个列表时,您并不是在制作该列表的副本-您是在附加对原始列表的另一个引用。您所有的附加尝试实际上都是对同一对象的引用,对其中一个对象的修改就是对所有对象的修改。
下面是这个令人惊讶的结果的演示。
>>> 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']]发布于 2012-04-13 23:41:12
在就地混洗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))https://stackoverflow.com/questions/10143844
复制相似问题