我有一个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)]
我知道如何排序,例如,元组的第一个元素,但我不知道如何解决这个问题。 任何帮助将不胜感激。谢谢!
答案 0 :(得分:11)
使用sorted
/ list.sort
的key
参数指定用于计算产品的函数,并将reverse
参数设置为True
以使结果是下降而不是上升,例如:
from operator import mul
print sorted([(3,2,3), (2,2,2), (6,4,1)], key=lambda tup: reduce(mul, tup), reverse=True)
答案 1 :(得分: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)]
答案 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)
键必须是一个函数,它返回一个值,用于对列表进行排序
反向为True,因为您希望按递减顺序排序
答案 3 :(得分:0)
>>> 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)]