#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)