Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to shuffle a copied list without shuffling the original list?

I'm using python and want to shuffle a copied list that I write after that into a txt file (see my code below).

Why does the shuffle function randomize the original list, too? I only use the copy for the function call.

Any ideas? Thank you !

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 and shuffledList are the same ! Why? liste should be the original one and shuffledList should be the shuffled list.... :)

like image 751
HKC72 Avatar asked Nov 30 '22 22:11

HKC72


1 Answers

random.shuffle works in place. Of course you could make a copy of the list prior to shuffling, but you'd be better off with random.sample, by taking a sample ... of the whole list:

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

so assigning the result of random.sample gives you a new, shuffled list without changing the original list.

like image 183
Jean-François Fabre Avatar answered Dec 05 '22 14:12

Jean-François Fabre