Kaydet (Commit) 890a4b92 authored tarafından Xtreak's avatar Xtreak Kaydeden (comit) Raymond Hettinger

bpo-35020: Link to sorting examples from list.sort() (GH-9931)

üst eeab510b
...@@ -145,6 +145,17 @@ ascending *age*, do the *age* sort first and then sort again using *grade*: ...@@ -145,6 +145,17 @@ ascending *age*, do the *age* sort first and then sort again using *grade*:
>>> sorted(s, key=attrgetter('grade'), reverse=True) # now sort on primary key, descending >>> sorted(s, key=attrgetter('grade'), reverse=True) # now sort on primary key, descending
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)] [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
This can be abstracted out into a wrapper function that can take a list and
tuples of field and order to sort them on multiple passes.
>>> def multisort(xs, specs):
... for key, reverse in reversed(specs):
... xs.sort(key=attrgetter(key), reverse=reverse)
... return xs
>>> multisort(list(student_objects), (('grade', True), ('age', False)))
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
The `Timsort <https://en.wikipedia.org/wiki/Timsort>`_ algorithm used in Python The `Timsort <https://en.wikipedia.org/wiki/Timsort>`_ algorithm used in Python
does multiple sorts efficiently because it can take advantage of any ordering does multiple sorts efficiently because it can take advantage of any ordering
already present in a dataset. already present in a dataset.
...@@ -246,7 +257,7 @@ To convert to a key function, just wrap the old comparison function: ...@@ -246,7 +257,7 @@ To convert to a key function, just wrap the old comparison function:
.. testsetup:: .. testsetup::
from functools import cmp_to_key >>> from functools import cmp_to_key
.. doctest:: .. doctest::
......
...@@ -1201,6 +1201,8 @@ application). ...@@ -1201,6 +1201,8 @@ application).
--- this is helpful for sorting in multiple passes (for example, sort by --- this is helpful for sorting in multiple passes (for example, sort by
department, then by salary grade). department, then by salary grade).
For sorting examples and a brief sorting tutorial, see :ref:`sortinghowto`.
.. impl-detail:: .. impl-detail::
While a list is being sorted, the effect of attempting to mutate, or even While a list is being sorted, the effect of attempting to mutate, or even
...@@ -4752,4 +4754,3 @@ types, where they are relevant. Some of these are not reported by the ...@@ -4752,4 +4754,3 @@ types, where they are relevant. Some of these are not reported by the
.. [5] To format only a tuple you should therefore provide a singleton tuple whose only .. [5] To format only a tuple you should therefore provide a singleton tuple whose only
element is the tuple to be formatted. element is the tuple to be formatted.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment