Невозможно перемешать строки списка списков путем копирования (Python) - PullRequest
0 голосов
/ 07 июня 2018

Я хочу перетасовать / переставить строки списка списков (двумерный массив) target в Python.

Я создаю список train, а затем перетасовываю его на np.random.shuffle() и используюэто перестановка индексов строк target в том же порядке.

Я знаю, что не могу просто написать new_list = old_list, чтобы скопировать один список в другой, поэтому (я думаю) я использовал правильный способскопируйте target в cop с помощью cop = [row[:] for row in target] упомянутого здесь, на SO.

Но даже после запуска приведенного ниже кода я не могу понять, почему cop меняет значение во времяпетля.В результате, target не то, что я ожидаю.

Код, который я пытаюсь:

import numpy as np

train = [0, 1, 2, 3, 4]

print("train: ", train)
target = np.hstack([np.arange(5).reshape(5,1), np.arange(100, 105).reshape(5,1), 
np.arange(200, 205).reshape(5,1)])

print(target)

np.random.shuffle(train)
print("Shuffled train: ", train)
cop = [row[:] for row in target]

for i in range(len(train)):
    print(train[i], '-----', cop[train[i]], '-------', cop)
    target[i] = list(cop[train[i]])

print("Target: ", target)

print("Cop: ", cop)

Пример вывода:

train: [0, 1, 2, 3, 4]
[[  0 100 200]
 [  1 101 201]
 [  2 102 202]
 [  3 103 203]
 [  4 104 204]]
Shuffled train: [4, 3, 2, 0, 1]
4 ----- [  4 104 204] ------- [array([  0, 100, 200]), array([  1, 101, 
201]), array([  2, 102, 202]), array([  3, 103, 203]), array([  4, 104, 
204])]
3 ----- [  3 103 203] ------- [array([  4, 104, 204]), array([  1, 101, 
201]), array([  2, 102, 202]), array([  3, 103, 203]), array([  4, 104, 
204])]
2 ----- [  2 102 202] ------- [array([  4, 104, 204]), array([  3, 103, 
203]), array([  2, 102, 202]), array([  3, 103, 203]), array([  4, 104, 
204])]
0 ----- [  4 104 204] ------- [array([  4, 104, 204]), array([  3, 103, 
203]), array([  2, 102, 202]), array([  3, 103, 203]), array([  4, 104, 
204])]
1 ----- [  3 103 203] ------- [array([  4, 104, 204]), array([  3, 103, 
203]), array([  2, 102, 202]), array([  4, 104, 204]), array([  4, 104, 
204])]
Target:  [[  4 104 204]
 [  3 103 203]
 [  2 102 202]
 [  4 104 204]
 [  3 103 203]]
Cop:  [array([  4, 104, 204]), array([  3, 103, 203]), array([  2, 102, 202]), array([  4, 104, 204]), array([  3, 103, 203])]

Процесс завершен с выходомкод 0

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...