I want to shuffle an array, but all I find was method like random.shuffle(x)
, from Best way to randomize a list of strings in Python
Can I do something like
import random
rectangle = [(0,0),(0,1),(1,1),(1,0)]
# I want something like
# disorderd_rectangle = rectangle.shuffle
Now I can only get away with
disorderd_rectangle = rectangle
random.shuffle(disorderd_rectangle)
print(disorderd_rectangle)
print(rectangle)
But it returns
[(1, 1), (1, 0), (0, 1), (0, 0)]
[(1, 1), (1, 0), (0, 1), (0, 0)]
So the original array
is also changed. How can I just create another shuffled array
without changing the original one?
The shuffle() method takes a sequence, like a list, and reorganize the order of the items. Note: This method changes the original list, it does not return a new list.
sample() . random. shuffle() shuffles a list in place, and random. sample() returns a new randomized list.
People here are advising deepcopy, which is surely an overkill. You probably don't mind the objects in your list being same, you just want to shuffle their order. For that, list provides shallow copying directly.
rectangle2 = rectangle.copy()
random.shuffle(rectangle2)
About your misconception: please read http://nedbatchelder.com/text/names.html#no_copies
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With