自定义Python列表sorting
我正在重构我的一些旧的代码,碰到这个:
alist.sort(cmp_items) def cmp_items(a, b): if a.foo > b.foo: return 1 elif a.foo == b.foo: return 0 else: return -1
代码的作品(我写了3年前),但我无法find这个东西logging在Python文档中的任何地方,每个人都使用sorted()
来实现自定义sorting。 有人可以解释为什么这个工程?
这是logging在这里 。
sort()方法使用可选参数来控制比较。
cmp指定两个参数(列表项)的自定义比较函数,根据第一个参数是小于,等于还是大于第二个参数,它应该返回负数,零或正数:cmp = lambda x,y :cmp(x.lower(),y.lower())。 默认值是None。
作为一个方面说明,这是一个更好的替代实施相同的sorting:
alist.sort(key=lambda x: x.foo)
或者:
import operator alist.sort(key=operator.attrgetter('foo'))
检查sorting如何 ,这是非常有用的。
就像这个例子。 你想sorting这个列表。
[('c', 2), ('b', 2), ('a', 3)]
输出:
[('a', 3), ('b', 2), ('c', 2)]
你应该sorting元组和第一个元组
def letter_cmp(a, b): if a[1] > b[1]: return -1 elif a[1] == b[1]: if a[0] > b[0]: return 1 else: return -1 else: return 1
最后:
只是sort(letter_cmp)