【问题标题】:Sort an array of tuples by product in python在python中按产品对元组数组进行排序
【发布时间】:2013-11-02 15:06:42
【问题描述】:

我有一个 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)]

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

【问题讨论】:

    标签: python arrays sorting


    【解决方案1】:

    使用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)
    

    【讨论】:

    • 该死!你比我快 15 秒
    • 你也可以用partialfunctoolskey=partial(reduce, mul)
    • @gnibbler:未删除,只是因为您在帖子中看到了价值:)
    【解决方案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)]
    

    【讨论】:

      【解决方案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,因为您希望它按降序排列

      【讨论】:

        【解决方案4】:
        >>> 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)]
        

        【讨论】:

          猜你喜欢
          • 2021-12-17
          • 2015-06-21
          • 1970-01-01
          • 2017-08-21
          • 1970-01-01
          • 2017-12-21
          • 2011-10-27
          • 2019-09-01
          • 2015-05-13
          相关资源
          最近更新 更多