Как сохранить случайно сгенерированный 2-D список из цикла while?

#python

#python

Вопрос:

Я не могу сохранить уникальный одномерный список в 2D-список.

У меня возникли проблемы с сохранением нескольких случайно сгенерированных списков в 2D-список. Я могу сгенерировать n количество уникальных 1D-сгенерированных списков, но когда я пытаюсь сохранить их в 2D-списке, я получаю тот же 1D-список, сгенерированный n количество раз.

Я использовал функцию append() в списке, но вместо этого получаю один и тот же одномерный список, добавляемый несколько раз.

Я использовал функцию extend(), но она возвращает одномерный список.

Я не понимаю, почему объект имеет псевдоним, когда я использую функцию shuffle() .

 import random
bd = list(range(10))
rng = random.Random()
rng.shuffle(bd)
d_list = []
number = 0 

while number < 5:
    d_list.append(bd)
    number  = 1

print(d_list)

 

Я ожидал, что результаты будут

[[6, 5, 3, 8, 2, 4, 0, 9, 1, 7],[7, 6, 9, 8, 5, 3, 4, 0, 2, 1], [2, 1, 0, 7, 3, 8, 6, 5, 4, 9], [1, 2, 7, 0, 3, 4, 5, 6, 8, 9],[7, 6, 3, 8, 4, 5, 1, 9, 0, 2]]

но вместо этого результаты

[[7, 6, 3, 8, 4, 5, 1, 9, 0, 2], [7, 6, 3, 8, 4, 5, 1, 9, 0, 2], [7, 6, 3, 8, 4, 5, 1, 9, 0, 2], [7, 6, 3, 8, 4, 5, 1, 9, 0, 2], [7, 6, 3, 8, 4, 5, 1, 9, 0, 2]]

Ответ №1:

В вашем коде:

 while number < 5:
    d_list.append(bd). #bd is the same and initialized one time
    number  = 1
 

Вам нужно выполнить рандомизатор в течение while, чтобы каждый раз у вас действительно были случайные списки.

Ответ №2:

Переместите инициализацию bd в свой цикл:

 import random

d_list = []
number = 0

while number < 5:
    bd = list(range(10))
    rng = random.Random()
    rng.shuffle(bd)
    d_list.append(bd)
    number  = 1

print(d_list)
 

Прямо сейчас вы перетасовываете и добавляете один и тот же список в d_list 5 раз. Инициализация списка внутри цикла означает, что вы фактически создаете 5 разных списков.

Ответ №3:

Чтобы решить вашу проблему, перемешивайте bd на каждой итерации или используйте эту однострочную строку для создания одного и того же списка:

 d_list = [random.sample(range(10), 10) for i in range(5)]
 

Ответ №4:

Кажется, что вы добавляете 5 раз один и тот же список в пустой список. Результат показывает именно это.

Если вы хотите, чтобы на каждой итерации создавался новый случайный список, я бы рекомендовал поместить перемешивание списка внутри цикла.

 import random

bd = list(range(10))
rng = random.Random()
rng.shuffle(bd)
d_list = []
number = 0 

while number < 5:
    rng.shuffle(bd)
    d_list.append(bd)
    number  = 1
 

Примечание: я бы также рекомендовал использовать for цикл вместо while info :

 import random

bd = list(range(10))
rng = random.Random()
rng.shuffle(bd)
d_list = []

for range(5):
    rng.shuffle(bd)
    d_list.append(bd)