【问题标题】:function that sums up nested list values?总结嵌套列表值的函数?
【发布时间】:2015-01-31 12:17:36
【问题描述】:

所以我试图创建一个递归函数,它将列表中的每个项目都汇总起来,现在我知道有一个简单的内置函数 sum(a) 但我正在尝试使用嵌套列表,例如这在下面,但我一直被抛出一个错误。

def sumList():
    list2 = [1, [2, 3,[4, 5, 6], 7, [8, [9, 10]], 11]]
    newlist = []
    lol = 0
    for i in range (len(list2)):

        if type(list2[i]) == type([]):
            print list2[i], "here"
            for i in range (len(list2[i])):
                lol += (len(list2[i]))



            newlist.append(i[:len(i)+1])


        if len(list2)==0:
            return None
        else:
            print list2[i]
            lol+=list2[i]


    print lol

sumList()

现在我知道我在程序中实现了很多我认为不需要的东西,但是我的错误 继续得到是

1
[2, 3, [4, 5, 6], 7, [8, [9, 10]], 11] here


TypeError: object of type 'int' has no len()

【问题讨论】:

    标签: python list recursion nested sum


    【解决方案1】:

    通常,您可以展平列表列表并在展平列表中搜索 min。有很多扁平化的食谱。下面是我从here 那里获取的。

    import collections
    
    def flatten(iterable):
        for el in iterable:
            if isinstance(el, collections.Iterable) and not isinstance(el, str):
                yield from flatten(el)
            else:
                yield el
    
    list2 = [2, 3, [4, 5, 6], 7, [8, [9, 10]], 11]
    
    print(list(flatten(list2)))
    # [2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
    print(sum(flatten(list2)))
    # 65
    

    【讨论】:

      【解决方案2】:
      # Python 2.7
      def recursiveSum(data):
        # This naively assumes that if it's not an int, it's a list
        # You may want to add more error handling if you expect dirtier data
        if isinstance(data, int): return data
        mySum = 0
        for i in data: mySum += recursiveSum(i)
        return mySum
      
      list2 = [1, [2, 3,[4, 5, 6], 7, [8, [9, 10]], 11]]
      print recursiveSum(list2) # Should get 66
      

      【讨论】:

      • 我的输出只有 1
      • 我无法复制您的结果 - 对我来说仍然是 66。哪个版本的 Python?
      【解决方案3】:
      def r_sum(mylist,nsum=0):
          for i in mylist:
              if isinstance(i,int):
                  nsum += i
              else:
                  nsum += r_sum(i)
          return nsum
      

      【讨论】:

        猜你喜欢
        • 2018-08-02
        • 1970-01-01
        • 1970-01-01
        • 2021-12-03
        • 2020-09-22
        • 2018-10-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多