random.shuffle只工作一次

问题描述 投票:1回答:2

我的任务是改组数字并将其追加到数组中。我的程序正在改组,但只有一次。

order = []
population = []
i = 0
for i in range(i,M):
    order.append(i)
i = 0
for i in range(i,10):
    random.shuffle(order)
    population.append(order)

my input = [[1, 0, 2], [1, 0, 2], [1, 0, 2], [1, 0, 2], [1, 0, 2]]
expected input = [[0, 2, 1], [1, 0, 2], [0, 2, 1], [2, 0, 1], [2, 1, 0]]
python arrays shuffle
2个回答
1
投票
您将引用附加到同一列表order,因此最终结果中只有一个列表,可以使用:

for i in range(i,10): new_o = order.copy() random.shuffle(new_o) population.append(new_o)


0
投票
您必须使用copy,因为您要一遍又一遍地添加相同的引用,因此实际上是在改组order,但它会影响population中的每个实例

import random import copy order = [] population = [] i = 0 for i in range(i,M): order.append(i) i = 0 for i in range(i,10): random.shuffle(order) population.append(copy.deepcopy(order)) print(population)


0
投票
您可以尝试这个吗?

import random M = 3 # number of elements in the list `order` order = list(range(M)) # works in Python2 and 3 N_population = 10 # number of elements in the list `population` population = [] for i in range(N_population): random.shuffle(order) population.append(order[:])

以下是示例输出:enter image description here
© www.soinside.com 2019 - 2024. All rights reserved.