Why does random.shuffle return None?
None in python?
>>> x = ['foo','bar','black','sheep'] >>> from random import shuffle >>> print shuffle(x) None
How do I get the shuffled value instead of
random.shuffle() changes the
x list in place.
Python API methods that alter a structure in-place generally return
None, not the modified data structure.
If you wanted to create a new randomly-shuffled list based of an existing one, where the existing list is kept in order, you could use
random.sample() with the full length of the input:
x = ['foo', 'bar', 'black', 'sheep'] random.sample(x, len(x))
shuffled = sorted(x, key=lambda k: random.random())
but this invokes sorting (an O(NlogN) operation), while sampling to the input length only takes O(N) operations (the same process as
random.shuffle() is used, swapping out random values from a shrinking pool).
>>> import random >>> x = ['foo', 'bar', 'black', 'sheep'] >>> random.sample(x, len(x)) ['bar', 'sheep', 'black', 'foo'] >>> sorted(x, key=lambda k: random.random()) ['sheep', 'foo', 'black', 'bar'] >>> x ['foo', 'bar', 'black', 'sheep']
★ Back to homepage or read more recommendations: