首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在python中迭代增长随机列表

在python中迭代增长随机列表
EN

Stack Overflow用户
提问于 2012-04-13 23:33:02
回答 3查看 132关注 0票数 0

我试图迭代地对一个包含4个元素的列表进行混洗,然后将混洗后的列表添加到一个不断增长的列表中。结果将是一个长度为4个元素的倍数的列表,其中每四个元素就是我的原始列表的某个组合。

我的代码是

代码语言:javascript
复制
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',...

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-04-13 23:38:37

我想你是想写

代码语言:javascript
复制
list2.extend(list1)

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

票数 5
EN

Stack Overflow用户

发布于 2012-04-13 23:53:43

当您将一个列表附加到另一个列表时,您并不是在制作该列表的副本-您是在附加对原始列表的另一个引用。您所有的附加尝试实际上都是对同一对象的引用,对其中一个对象的修改就是对所有对象的修改。

下面是这个令人惊讶的结果的演示。

代码语言:javascript
复制
>>> 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
EN

Stack Overflow用户

发布于 2012-04-13 23:41:12

在就地混洗list1时,将混洗list1的所有实例。当您将list1附加到list2时,您只是在一遍又一遍地打乱相同的列表。

尝试使用deepcopy

代码语言:javascript
复制
import random, copy
list1 = [1,2,3,4]
list2 = []
for i in xrange(10):
    random.shuffle(list1)
    list2.append(copy.deepcopy(list1))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10143844

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档