diff options
author | Benjamin Peterson <benjamin@python.org> | 2016-05-27 05:56:51 (GMT) |
---|---|---|
committer | Benjamin Peterson <benjamin@python.org> | 2016-05-27 05:56:51 (GMT) |
commit | f50cc9ad663a523901087282aff512fcb928d768 (patch) | |
tree | 61f4f6df03117e66e48034b4f995d0103a5762e2 /Doc/faq/programming.rst | |
parent | 3f69f02792ee876ed0bd9cf9311bfb510889e164 (diff) | |
parent | 047ada4ef347b9557227685b9791d05451765cc6 (diff) | |
download | cpython-f50cc9ad663a523901087282aff512fcb928d768.zip cpython-f50cc9ad663a523901087282aff512fcb928d768.tar.gz cpython-f50cc9ad663a523901087282aff512fcb928d768.tar.bz2 |
merge 3.5
Diffstat (limited to 'Doc/faq/programming.rst')
-rw-r--r-- | Doc/faq/programming.rst | 31 |
1 files changed, 1 insertions, 30 deletions
diff --git a/Doc/faq/programming.rst b/Doc/faq/programming.rst index 50471e8..a0ddfb4 100644 --- a/Doc/faq/programming.rst +++ b/Doc/faq/programming.rst @@ -1313,40 +1313,11 @@ I want to do a complicated sort: can you do a Schwartzian Transform in Python? The technique, attributed to Randal Schwartz of the Perl community, sorts the elements of a list by a metric which maps each element to its "sort value". In -Python, just use the ``key`` argument for the ``sort()`` method:: +Python, use the ``key`` argument for the :func:`sort()` function:: Isorted = L[:] Isorted.sort(key=lambda s: int(s[10:15])) -The ``key`` argument is new in Python 2.4, for older versions this kind of -sorting is quite simple to do with list comprehensions. To sort a list of -strings by their uppercase values:: - - tmp1 = [(x.upper(), x) for x in L] # Schwartzian transform - tmp1.sort() - Usorted = [x[1] for x in tmp1] - -To sort by the integer value of a subfield extending from positions 10-15 in -each string:: - - tmp2 = [(int(s[10:15]), s) for s in L] # Schwartzian transform - tmp2.sort() - Isorted = [x[1] for x in tmp2] - -For versions prior to 3.0, Isorted may also be computed by :: - - def intfield(s): - return int(s[10:15]) - - def Icmp(s1, s2): - return cmp(intfield(s1), intfield(s2)) - - Isorted = L[:] - Isorted.sort(Icmp) - -but since this method calls ``intfield()`` many times for each element of L, it -is slower than the Schwartzian Transform. - How can I sort one list by values from another list? ---------------------------------------------------- |