清单清单上的Python random.shuffle()会传回相同清单的清单

时间:2019-05-27 15:38:17

标签: python

在我的脚本中,我需要生成一个简单的[1,2,3,4]值列表,然后分别在此列表中随机排列每个列表。我使用了random.shuffle()函数,该函数在单个数组上可以正常工作,但是当我尝试在for循环中使用它时,输出的是经过改组的数组的列表,但是它们都是相同的:

  

[3,1,2,4]
  [3,1,2,4]
  [3,1,2,4]
  等等...

我尝试使用不同的python版本(2.7、3.6)运行脚本,但是问题仍然存在。

这是代表问题的简化代码:

import random

numbers_list = [1,2,3,4]
#make a list of 10 numbers_list
list_of_lists = [numbers_list]*10

#shuffle every list inside list_of_lists
for i in list_of_lists:
    random.shuffle(i)

#print every list from list_of_lists
for a in list_of_lists:
    print(a)

多次运行脚本会产生不同的列表,但是它们始终由重复的一个数组组成。我该如何解决?是random.shuffle()还是我的脚本有问题?我在做什么错了?

2 个答案:

答案 0 :(得分:4)

您的问题是这一行:

list_of_lists = [numbers_list]*10

这将创建一个包含10个引用的列表,这些引用指向同一列表(numbers_list)。您对任何列表所做的任何更改都会反映在所有10个副本中-因为它们是相同的列表。

改为执行以下操作:

list_of_lists = [numbers_list.copy() for _ in range(10)]

答案 1 :(得分:0)

罪犯在那里:

numbers_list = [1,2,3,4]
#make a list of 10 numbers_list
list_of_lists = [numbers_list]*10

现在list_of_lists实际上是一个重复了十次的列表,您可以避免使用已经显示的.copy方法或替换为:

list_of_lists = [numbers_list]*10

使用

list_of_lists = [list(numbers_list) for _ in range(10)]

list_of_lists = [numbers_list[:] for _ in range(10)]

可能要读第一个,我想要基于list改用numbers_list的新printf,然后阅读第二个所谓的切片。

相关问题