我正在尝试迭代地混洗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 ”,...]
答案 0 :(得分:5)
我想你想写
list2.extend(list1)
否则,您将反复将对象list1的相同实例添加到list2。
答案 1 :(得分:2)
当您将列表附加到另一个列表时,您不会复制该列表 - 您将附加对原始列表的另一个引用。你追加的所有尝试都是对同一个对象的引用,对一个对象的修改是对所有对象的修改。
这是一个令人惊讶的结果的演示。
>>> 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']]
答案 2 :(得分:0)
当您将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))