Skip to content

Commit

Permalink
remove cruft from Schwarzian transform section
Browse files Browse the repository at this point in the history
  • Loading branch information
benjaminp committed May 27, 2016
1 parent 6d3ad2f commit 047ada4
Showing 1 changed file with 1 addition and 30 deletions.
31 changes: 1 addition & 30 deletions Doc/faq/programming.rst
Original file line number Diff line number Diff line change
Expand Up @@ -1312,40 +1312,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?
----------------------------------------------------
Expand Down

0 comments on commit 047ada4

Please sign in to comment.