Message336338
> shouldn't be "mode" at some point be replaced by "multimode" ?
No. The signature is completely incompatible with the existing mode() function.
Like MS Excel which has two functions, MODE.SGNL and MODE.MULT, we should also have two functions, each with a clean signature and with running speed that is optimal for the desired result:
mode(data: Iterable) -> object
Returns a single value
If multiple modes found, return first encountered
Raises StatisticsError for an empty input
Fast O(n), single pass, doesn't keep all data in memory
multimode(data: Iterable) -> List[object]
Always returns a list
If multiple modes found, all are returned
Returns an empty list for an empty input
Slow O(n log n), loads all data in memory, full sort
For the first one, I recommend skipping deprecation and just changing the behavior that usually raises an exception for multiple modes. In its current form, it likely to create bugs due to uncaught exceptions, and it doesn't provide any work-around if you do want only one of the modes.
By analogy, consider what would happen if we had a max() function that raised an exception when there were duplicate maximum values. It would be almost usable. So, what the real max() actually does is return the first encountered maximum value:
>>> max(3, 1, 3.0)
3
>>> max(3.0, 1, 3)
3.0 |
|
Date |
User |
Action |
Args |
2019-02-22 17:48:56 | rhettinger | set | recipients:
+ rhettinger, steven.daprano, francismb, Windson Yang |
2019-02-22 17:48:56 | rhettinger | set | messageid: <1550857736.48.0.737242231468.issue35892@roundup.psfhosted.org> |
2019-02-22 17:48:56 | rhettinger | link | issue35892 messages |
2019-02-22 17:48:56 | rhettinger | create | |
|