在Python语言中,对列表列表进行maximumBy (高阶函数接受比较函数)的惯用方法是什么,其中我们想要进行的比较是列表的总和?
下面是一个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发布于 2010-05-04 13:35:08
从Python2.5开始,您可以使用带有关键参数的max:
>>> max(a, key=sum)
[4, 5, 6]发布于 2010-05-04 13:37:55
它的效率不是很高,但是:
reduce(lambda x,y: x if sum(x)>sum(y) else y, [[1,2,3],[4,5,6],[1,3,5]])发布于 2011-06-01 05:25:33
如果max没有key参数,您可以显式地编写DSU模式:
max(izip(imap(sum,a),a))[1]izip和imap来自Python2中的itertools模块,它们做zip和map做的事情,但懒惰地使用python生成器,以避免包含中间列表。在Python3中,地图和zip内置是惰性的。
https://stackoverflow.com/questions/2763015
复制相似问题