繁体   English   中英

使用for循环汇总python中列表中的元素

[英]Summing up elements in a list in python using a for loop

当在一个程序中使用列表中的数字集创建小节时,我发现将列表中的项目加起来是行不通的。 我认为最好的方法就是创建一个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”对象不可迭代

我该怎么办?

>>> 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

如果尝试创建单个类别,则可以使用dict:

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: *************************

len(phonelist[0])是一个int,因此无法对其进行循环。 您可以将其更改为

for x in phonelist[0]:

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

numphone = 0
for x in phonelist[0]:
    numphone = numphone + x

这应该工作。 您可以遍历列表,而不是遍历整个列表,因为长度是整数,并且遍历整数没有意义

最好的解决方案是使用sum()内置函数 如对该问题的其他答案所述,一种方法是对每个汇总列表求和,然后对这些小计求和。

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

sum(itertools.chain.from_iterable(phonelist))

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM