On 07.09.2016 02:49, Chris Kaynor wrote:
I'll weigh in and say that I've had a few cases where I've wanted a shuffled function, but not many. The vast majority are interactive uses, where I want to get a sampling of data, and in those cases I'm normally just printing the output (often, by letting the REPL handle it).

I'm fairly sure I've never wanted a shuffled in the actual code, and shuffle is almost always what I want (or just pulling items at random).

Probably the most common case is to produce a list of random numbers in a (small) range. The current code looks roughly like:

import random
items = list(range(10))
random.shuffle(items)
items # this is interactive, so this prints it for me

As this does not come up often, I almost invariably write the following first:
import random
random.shuffle(range(10))

Then get no output and write the first form. It is not a major difference, and only comes up maybe a few times a year at most for me.


That sounds extremely familiar. I would say the interactive session is the clear use-case here. But don't ask me why I need a shuffled list of somethings (probably for some highly vicious and immoral reasons ;-) ).

@David
Your idea of a PyPI package could almost work. However, in an interactive python console, I expect as much batteries included as possible to make it as quick as possible. And considering how simple such wrapper would be, it almost does not warrant the download of a third-party package.

@Tim
Of course it's easy to write a wrapper function. But from what I gather here, this is not the point. In interactive sessions, I find it highly annoying when I need to define my own functions. Especially because I need to do it again in a new python session.

Somebody provided a one-line hack using "sorted" to emulate "shuffled". The statement basically is: shuffling is a special kind of sorting. So, I would expect the interface to work the same. That at least suffices for me to understand Arek's point of view.

I would even go so far as to say:

shuffled(my_list) # returns a new shuffled list
my_list.shuffle() # shuffles in-place

Allowing to plug-in the RNG, when needed.

Sven