列表中相同位置的元素总和

时间:2012-12-06 10:31:45

标签: list haskell nested sum fold

如何在同一位置列表中的元素总和? 例如:

[[2,3,4],[5,6,7],[8,9,10]]=[15,18,21]

由于

3 个答案:

答案 0 :(得分:2)

尝试:

sumIn :: Num a => [[a]] -> [a]
sumIn = foldl (zipWith (+)) (repeat 0)

请注意,如果参数是空列表,则结果是无限的零列表。因此,您可能希望单独处理此案例,例如

sumIn :: Num a => [[a]] -> [a]
sumIn [] = []
sumIn xs = foldl (zipWith (+)) (repeat 0) xs

答案 1 :(得分:2)

您可以转置列表,并对结果中的每个列表求和:

ghci> import Data.List (transpose)
ghci> map sum $ transpose [[2,3,4],[5,6,7],[8,9,10]]
[15,18,21]

与其他解决方案不同,这适用于非均匀长度的列表。

答案 2 :(得分:2)

这是GHCi中的一个例子:

λ> let xs = [[2,3,4],[5,6,7],[8,9,10]]
λ> foldr1 (zipWith (+)) xs
[15,18,21]