【问题标题】:Summing up elements in a list in python using a for loop使用for循环在python中总结列表中的元素
【发布时间】:2014-01-02 18:02:18
【问题描述】:

在开发一个从列表中的数字集创建条形的程序时,我发现将列表中的项目相加是行不通的。我认为最好的方法就是创建一个for 循环。

这是我的清单:

phonelist = [[12,14,16,17,18],[16,23,54,64,32]]

然后我尝试用 for 循环添加它

numphone = 0
for x in len(phonelist[0]):
    numphone = numphone + x

但我得到了这个错误:

TypeError: 'int' 对象不可迭代

我该怎么办?

【问题讨论】:

    标签: python list loops for-loop numbers


    【解决方案1】:
    >>> phonelist = [[12,14,16,17,18],[16,23,54,64,32]]
    >>> [sum(li) for li in phonelist]
    [77, 189]
    >>> sum([sum(li) for li in phonelist])
    266
    

    或:

    >>> sum(sum(li) for li in phonelist)    # generator expression...
    266
    

    如果您尝试创建单独的类别,您可以使用字典:

    data={'Bar {}'.format(i):sum(li) for i, li in enumerate(phonelist, 1)}
    data['Total']=sum(data.values())
    
    print data
    {'Bar 2': 189, 'Bar 1': 77, 'Total': 266}
    

    那么如果你想制作一个简单的条形图:

    for bar in sorted(data.keys()):
        print '{}: {}'.format(bar, int(round(25.0*data[bar]/data['Total']))*'*')
    

    打印:

    Bar 1: *******
    Bar 2: ******************
    Total: *************************
    

    【讨论】:

      【解决方案2】:

      len(phonelist[0]) 是一个整数,所以你不能循环它。您可以将其更改为

      for x in phonelist[0]:
      

      这样x 将采用phonelist[0] 的每个值。

      【讨论】:

      • 当然@dawg's answer 是一种更 Pythonic 的方法来做你想做的事情。
      【解决方案3】:
      numphone = 0
      for x in phonelist[0]:
          numphone = numphone + x
      

      这应该可行。你迭代整个列表,而不是它的长度,因为长度是一个整数,迭代一个整数没有意义

      【讨论】:

        【解决方案4】:

        最好的解决方案是使用the sum() built-in function。正如该问题的其他答案中所给出的,一种方法是对每个 sumlist 求和,然后对这些小计求和。

        但是,更好的解决方案是展平子列表 - 最好使用 itertools.chain.from_iterable() 来实现。

        sum(itertools.chain.from_iterable(phonelist))
        

        这是一个最佳解决方案,因为这意味着您不必执行大量单独的求和运算,或创建中间列表。如果您的数据是惰性源,它也会惰性地工作,从而使您的代码更节省内存并分散处理负载。

        【讨论】:

          猜你喜欢
          • 2021-12-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-11-11
          • 2016-09-19
          • 1970-01-01
          • 2017-09-12
          • 1970-01-01
          相关资源
          最近更新 更多