如何在同一位置对列表中的元素求和?例如:
[[2,3,4],[5,6,7],[8,9,10]]=[15,18,21]
谢谢
您可以转置列表,并对结果中的每个列表求和:
ghci> import Data.List (transpose)
ghci> map sum $ transpose [[2,3,4],[5,6,7],[8,9,10]]
[15,18,21]
与其他解决方案不同,这适用于长度不均匀的列表。
这是 GHCi 中的一个示例:
λ> let xs = [[2,3,4],[5,6,7],[8,9,10]]
λ> foldr1 (zipWith (+)) xs
[15,18,21]
尝试:
sumIn :: Num a => [[a]] -> [a]
sumIn = foldl (zipWith (+)) (repeat 0)
请注意,如果参数是一个空列表,则结果是一个无限的零列表。因此,您可能希望单独处理这种情况,例如
sumIn :: Num a => [[a]] -> [a]
sumIn [] = []
sumIn xs = foldl (zipWith (+)) (repeat 0) xs