2024-04-25 01:28:03 发布
网友
当然,它不一定是一只羔羊。任何传入的函数(如下面的函数)都将工作
def numeric_compare(x, y): if x > y: return 1 elif x == y: return 0 else: #x < y return -1 a = [5, 2, 3, 1, 4] a.sort(numeric_compare)
来源:Python Sorting
所以,对你来说。。。
def object_compare(x, y): if x.resultType > y.resultType: return 1 elif x.resultType == y.resultType: return 0 else: #x.resultType < y.resultType return -1 a.sort(object_compare)
上面提到的lambda绝对是最紧凑的方法,但是也有使用operator.itemgetter。
import operator #L = [('c', 2), ('d', 1), ('a', 4), ('b', 3)] map(operator.itemgetter(0), L) #['c', 'd', 'a', 'b'] map(operator.itemgetter(1), L) #[2, 1, 4, 3] sorted(L, key=operator.itemgetter(1)) #[('d', 1), ('c', 2), ('b', 3), ('a', 4)]
所以你可以使用itemgetter('resultType')。(假设定义了getitem)
sorted(L, key=operator.itemgetter('resultType'))
somelist.sort(key = lambda x: x.resultType)
下面是另一种方法,可以做你经常看到的相同的事情:
import operator s.sort(key = operator.attrgetter('resultType'))
如果您还没有看到^{},您可能还想查看它。它不会修改原始列表-它会返回一个新的排序列表。
somelist.sort(cmp = lambda x, y: cmp(x.resultType, y.resultType))
比:
在第一种情况下,我们传入一个比较函数,用于对列表中的元素进行成对比较。在第二种情况下,我们分配一个新的键函数结果对列表和原始值。然后对列表进行排序,然后从对中去掉键值。如果比较函数很昂贵,这非常有用,但如果比较非常便宜,这只是浪费内存。
也就是说,密钥版本的扩展如下所示:
l = [y for x,y in sorted(zip([key(i) for i in l], l))]
对于一个简单的键函数,这显然是太多的开销,所以我建议使用更轻的基于函数的排序。
注意,cmp函数参数需要在小于、等于和大于的情况下返回-1、0、1。你可以自己写,但你也可以使用内置的cmp函数,这更清楚。
当然,它不一定是一只羔羊。任何传入的函数(如下面的函数)都将工作
来源:Python Sorting
所以,对你来说。。。
上面提到的lambda绝对是最紧凑的方法,但是也有使用operator.itemgetter。
所以你可以使用itemgetter('resultType')。(假设定义了getitem)
下面是另一种方法,可以做你经常看到的相同的事情:
如果您还没有看到^{} ,您可能还想查看它。它不会修改原始列表-它会返回一个新的排序列表。
比:
在第一种情况下,我们传入一个比较函数,用于对列表中的元素进行成对比较。在第二种情况下,我们分配一个新的键函数结果对列表和原始值。然后对列表进行排序,然后从对中去掉键值。如果比较函数很昂贵,这非常有用,但如果比较非常便宜,这只是浪费内存。
也就是说,密钥版本的扩展如下所示:
对于一个简单的键函数,这显然是太多的开销,所以我建议使用更轻的基于函数的排序。
注意,cmp函数参数需要在小于、等于和大于的情况下返回-1、0、1。你可以自己写,但你也可以使用内置的cmp函数,这更清楚。
相关问题 更多 >
编程相关推荐