【问题标题】:Sum of elements in a list at the same position列表中相同位置的元素总和
【发布时间】:2012-12-06 10:31:44
【问题描述】:

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

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

谢谢

【问题讨论】:

    标签: list haskell nested sum fold


    【解决方案1】:

    试试:

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

    请注意,如果参数是一个空列表,则结果是一个无限的零列表。所以你可能想单独处理这种情况,例如

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

    【讨论】:

      【解决方案2】:

      这是 GHCi 中的一个示例:

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

      【讨论】:

      • 如果我想在其他列表中添加 0,如果它是偶数,则添加 1?谢谢
      • 您可以定义f x = if even x then 0 else 1,然后在上面的结果中定义map f。所以map f [15,18,21] 会给你[1,0,1]。这就是你想要的吗?
      【解决方案3】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-10-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多