random.shuffle работает только один раз - PullRequest
1 голос
/ 20 апреля 2020

Моя задача состоит в том, чтобы перетасовать числа и добавить их в массив. Моя программа тасует его, но только один раз.

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]]

Ответы [ 2 ]

1 голос
/ 20 апреля 2020

вы добавляете ссылки в тот же список order, поэтому у вас есть один список в конечном результате, вы можете использовать:

for i in range(i,10):
    new_o = order.copy()
    random.shuffle(new_o)
    population.append(new_o)
0 голосов
/ 20 апреля 2020

Вы должны использовать копию, потому что вы добавляете одну и ту же ссылку снова и снова, поэтому вы на самом деле тасуете 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)
...