我有一个 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)]
例如,我知道如何按元组的第一个元素进行排序,但我不确定如何解决这个问题。任何帮助将不胜感激。谢谢!
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)]
从我的角度来看,一个更简单的解决方案:
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 因为您希望它按降序排列
>>> 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)]