在python中按产品对元组数组进行排序

时间:2013-10-24 04:28:49

标签: python arrays sorting

我有一个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 个答案:

答案 0 :(得分:11)

使用sorted / list.sortkey参数指定用于计算产品的函数,并将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)]