5

我有一个 3 元组数组,我想按照 Python 中每个元组的元素的递减顺序对它们进行排序。因此,例如,给定数组

[(3,2,3), (2,2,2), (6,4,1)]

因为 3*2*3 = 18, 2*2*2 = 8, 6*4*1 = 24,所以最终结果是

[(6,4,1), (3,2,3), (2,2,2)]

例如,我知道如何按元组的第一个元素进行排序,但我不确定如何解决这个问题。任何帮助将不胜感激。谢谢!

4

4 回答 4

12

使用/的key参数指定计算乘积的函数,并将参数设置为使结果降序而不是升序,例如:sortedlist.sortreverseTrue

from operator import mul
print sorted([(3,2,3), (2,2,2), (6,4,1)], key=lambda tup: reduce(mul, tup), reverse=True)
于 2013-10-24T04:33:05.137 回答
4
In [176]: L = [(3,2,3), (2,2,2), (6,4,1)]

In [177]: L.sort(key=lambda (a,b,c):a*b*c, reverse=True)

In [178]: L
Out[178]: [(6, 4, 1), (3, 2, 3), (2, 2, 2)]
于 2013-10-24T04:33:24.740 回答
3

从我的角度来看,一个更简单的解决方案:

a = [(3,2,3), (2,2,2), (6,4,1)]

def f(L):
    return L[0]*L[1]*L[2]

print sorted(a, key = f, reverse = True)

key必须是一个返回值的函数,该值将用于对列表进行排序

reverse是 True 因为您希望它按降序排列

于 2013-10-24T04:37:54.993 回答
1
>>> from operator import mul
>>> input_list = [(3,2,3), (2,2,2), (6,4,1)]
>>> input_list.sort(key=lambda tup: reduce(mul,tup)) 
>>> print input_list
[(2, 2, 2), (3, 2, 3), (6, 4, 1)]
于 2013-10-24T05:15:18.770 回答