Как перетасовать скопированный список, не перетасовывая оригинальный список?

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

Почему функция shuffle также рандомизирует исходный список? Я использую копию только для вызова функции.

Есть идеи? Спасибо!

from random import shuffle

def shuffleList2txt(myList):
    shuffle(myList)

    f = open('randList.txt','w')
    f.write(str(liste))
    f.close()

    return(myList)


liste = [1,2,3,4,5,6,7,8,9,10]
copy = liste
shuffledList = shuffleList2txt(copy)

liste и shuffledList - это одно и то же! Зачем? liste должен быть оригинальным, а shuffledList должен быть перетасованным списком....:)

1 ответ

Решение

random.shuffle работает на месте. Конечно, вы можете сделать копию списка до перетасовки, но вам будет лучше с random.sample, взяв образец... из всего списка:

>>> l = [1,2,3,4]
>>> random.sample(l,len(l))
[3, 1, 2, 4]
>>> l
[1, 2, 3, 4]

так присваивая результат random.sample дает новый перетасованный список без изменения исходного списка.

Другие вопросы по тегам