Issue 29754: sorted ignores reverse=True when sorting produces same list (original) (raw)

sorted ignores reverse=True when sorting produces same list, I was expecting reverse regardless of the sorting outcome.

Python 3.5.2 (default, Jul 17 2016, 00:00:00) [GCC 4.8.4] on linux Type "help", "copyright", "credits" or "license" for more information.

data = [{'name': 'first', 'weight': 1},{'name': 'second', 'weight': 1},{'name': 'third', 'weight': 1}, {'name': 'fourth', 'weight': 1}] sorted(data, key=lambda x: x['weight'], reverse=True) [{'name': 'first', 'weight': 1}, {'name': 'second', 'weight': 1}, {'name': 'third', 'weight': 1}, {'name': 'fourth', 'weight': 1}] sorted(data, key=lambda x: x['weight'], reverse=True) == sorted(data, key=lambda x: x['weight']).reverse() False

Thanks!

Your last line can't possibly return True, because somelist.reverse() returns None.

So the last line is irrelevant. Your complaint appears to be about the line before, which shows that the list retains its original order.

That's expected. All the keys are equal, so a stable sort must retain the original order (that's what "stable" means). So that's not a bug - it's a feature.

The idea that x.sort(reverse=True) must do the same as x.sort(); x.reverse() is something you made up in your head ;-) That is, the docs don't say that. What they do say:

""" reverse is a boolean value. If set to True, then the list elements are sorted as if each comparison were reversed. """

That has no effect on keys that compare equal. It means that keys that compare "less than" are treated as if they had compared "greater than" instead, and vice versa.

While it may not be immediately obvious, what x.sort(reverse=True) is actually equivalent to is the sequence:

x.reverse() x.sort() x.reverse()