gerbmerge/gerbmerge/schwartz.py

39 lines
968 B
Python

"""
Implement the Schwartizan Transform method of sorting
a list by an arbitrary metric (see the Python FAQ section
4.51).
--------------------------------------------------------------------
This program is licensed under the GNU General Public License (GPL)
Version 3. See http://www.fsf.org for details of the license.
Rugged Circuits LLC
http://ruggedcircuits.com/gerbmerge
"""
def stripit(pair):
return pair[1]
def schwartz(List, Metric):
def pairing(element, M = Metric):
return (M(element), element)
paired = list(map(pairing, List))
paired.sort()
return list(map(stripit, paired))
def stripit2(pair):
return pair[0]
def schwartz2(List, Metric):
"Returns sorted list and also corresponding metrics"
def pairing(element, M = Metric):
return (M(element), element)
paired = list(map(pairing, List))
paired.sort()
theList = list(map(stripit, paired))
theMetrics = list(map(stripit2, paired))
return (theList, theMetrics)