代码之家  ›  专栏  ›  技术社区  ›  Don Stewart

通过python中元素的和查找列表的最大值

  •  15
  • Don Stewart  · 技术社区  · 14 年前

    惯用的方法是什么 maximumBy (高阶函数接受一个比较函数进行测试),在一个列表列表上,我们要进行的比较是列表的总和,在python中?

    下面是Haskell实现和示例输出:

    > maximumBy (compare `on` sum) [[1,2,3],[4,5,6],[1,3,5]]
    > [4,5,6]
    

    以及那些基本库函数的实现,只是为了完整性(如果您想使用reduce或其他东西:)

    maximumBy cmp xs =  foldl1 maxBy xs
        where
           maxBy x y = case cmp x y of GT -> x; _ -> y
    
    k `on` f = \x y -> f x `k` f y
    
    sum      =  foldl' (+) 0
    
    3 回复  |  直到 13 年前
        1
  •  42
  •   Mark Byers    14 年前

    自python 2.5以来,您可以使用 max 使用关键参数:

    >>> max(a, key=sum)
    [4, 5, 6]
    
        2
  •  1
  •   outis    14 年前

    效率不高,但是:

    reduce(lambda x,y: x if sum(x)>sum(y) else y, [[1,2,3],[4,5,6],[1,3,5]])
    
        3
  •  1
  •   Sotiris    13 年前

    如果max没有key参数,则可以显式编码dsu模式:

    max(izip(imap(sum,a),a))[1]
    

    izip imap 它们来自python 2中的itertools模块,并执行zip和map所做的操作,但却懒洋洋地使用python生成器,以避免考虑中间列表。在python 3中,map和zip内置代码是惰性的。