Python Random.shuffle不';在回路内部不工作

Python Random.shuffle不';在回路内部不工作,python,python-3.x,random,shuffle,Python,Python 3.x,Random,Shuffle,Random.shuffle在循环内不起作用,它总是产生相同的无序列表,但我需要19个不同的列表: for i in range(19): random.seed() #random.randint(1, 50) random.shuffle(candidates_random_list) random.seed() candidates_full_list.append(candidates_random_list) print('candidates_full

Random.shuffle在循环内不起作用,它总是产生相同的无序列表,但我需要19个不同的列表:

for i in range(19):
    random.seed() #random.randint(1, 50)
    random.shuffle(candidates_random_list)
    random.seed()
    candidates_full_list.append(candidates_random_list)
print('candidates_full_list ----- \n\n ')
pprint(candidates_full_list)

我看过很多教程,期望seed()能够解决这个问题,但我认为这是一种错误行为。每次运行它都会洗牌,但不在循环中。

shuffle
已就位,并且您的列表包含对同一列表的19个引用,而不是每次洗牌产生的单独列表

而是存储一份无序列表的副本

for i in range(19):
    random.shuffle(candidates_random_list)
    candidates_full_list.append(candidates_random_list[:])

shuffle
已就位,并且您的列表包含对同一列表的19个引用,而不是每个shuffle产生的单独列表

而是存储一份无序列表的副本

for i in range(19):
    random.shuffle(candidates_random_list)
    candidates_full_list.append(candidates_random_list[:])

您是否可以显示您期望从代码中得到的以及您实际观察到的内容的最小输出?您可能会感兴趣:
random.shuffle()
shuffle将列表放置在适当的位置,而不是进行复制。因此,您只需多次附加同一列表。非常确定您可以去掉那些
random.seed()
行,这样您就可以很好地使用它了。您可以显示您期望从代码中得到的以及您实际观察到的内容的最小输出吗?您可能会感兴趣:
random.shuffle()
将列表洗牌到位,您不会复制。因此,您只是多次添加同一个列表。非常确定您可以去掉那些
random.seed()
行,这样您就可以很好地使用
candidates\u full\u list+=candidates\u random\u list
?不,这相当于
candidates\u full\u list.extend(candidates\u random\u list)
;它将参数的元素添加到列表中,而不是参数本身!说
候选者\完整\列表+=候选者\随机\列表
不是更清楚吗?不,这相当于
候选者\完整\列表。扩展(候选者\随机\列表)
;它将参数的元素添加到列表中,而不是参数本身!