Предположим, я хочу создать вложенный список с последовательностью чисел и не хочу повторять последовательность повторений.Python Создание вложенного списка со случайным модулем
т.е. я хотел бы что-то вроде этого: [[1,2,3,4],[2,1,3,4],[4,2,3,1]]
, где len
списка зависит от того, сколько не повторяющаяся последовательности числа, которое я мог бы генерировать в ограниченной попытке (четыре попытки в ниже случае)
Так вот мою первую попытку:
import random
rng = random.Random()
bd =list(range(4))
i = 0
result =[]
while i <4:
rng.shuffle(bd)
if bd not in result:
result.append(bd)
i +=1
print(result)
Я создал список bd = [0,1,2,3]
прежде, чем ввести цикл while.
При запуске вышеуказанного кода я неожиданно получаю только один элемент в своем вложенном списке.
Результат: [[1, 2, 0, 3]]
Но если я изменить код немного, он работает, как я ожидал. Вот мой модифицированный код:
import random
rng = random.Random()
i = 0
result =[]
while i <4:
bd =list(range(4))
rng.shuffle(bd)
if bd not in result:
result.append(bd)
i +=1
print(result)
Результат: [[3, 2, 0, 1], [1, 0, 3, 2], [0, 1, 3, 2]]
Что я могу сделать, это просто сбросить список bd
в каждом цикле снова.
По моему мнению, список bd
будет перетасован в каждом цикле, поэтому сброс bd
на [0,1,2,3]
должен быть бессмысленным. Может ли кто-нибудь объяснить мне, почему работает модифицированный код? Благодарю.
Также см http://stackoverflow.com/questions/240178/python-list-of-lists-changes-reflected-across-sublists-unexpectedly –