使用for循环在Python中总结列表中的元素

问题描述 投票:0回答:5

在开发一个从列表中的数字集创建条形的程序时,我发现在列表中添加项目不起作用。我认为最好的方法就是制作一个

for
循环。

这是我的清单:

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

然后我尝试将其与

for
循环相加

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

但是我收到此错误:

类型错误:“int”对象不可迭代

我该怎么办?

python list loops for-loop numbers
5个回答
7
投票
>>> 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])
是一个 int,所以你不能循环它。您可以将其更改为

for x in phonelist[0]:

这样

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


2
投票
numphone = 0
for x in phonelist[0]:
    numphone = numphone + x

这应该有效。您迭代明显的列表,而不是超过它的长度,因为长度是一个整数,并且迭代整数没有意义


1
投票

最好的解决方案是使用

sum()
内置函数。正如这个问题的其他答案中给出的,一种方法是对每个求和列表求和,然后对这些小计求和。

但是,更好的解决方案是展平子列表 - 这最好通过

itertools.chain.from_iterable()
来实现。

sum(itertools.chain.from_iterable(phonelist))

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


0
投票

@gareth拉蒂 10年后仍然如此。 o7 先生

© www.soinside.com 2019 - 2024. All rights reserved.