使用for循环在python中列出列表中的元素

时间:2014-01-02 18:02:19

标签: python list loops for-loop numbers

在处理从列表中的数字组中创建条形图的程序时,我发现在列表中添加项目不起作用。我认为最好的方法就是制作一个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'对象不可迭代

我该怎么办?

4 个答案:

答案 0 :(得分: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: *************************

答案 1 :(得分:1)

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

for x in phonelist[0]:

这种方式x将采用phonelist[0]的每个值。

答案 2 :(得分:1)

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

这应该有效。你遍历列表,而不是遍历它的长度,因为长度是一个整数并且迭代一个整数是没有意义的

答案 3 :(得分:1)

最佳解决方案是使用the sum() built-in function。在这个问题的其他答案中给出的一种方法是对每个总和进行求和,然后对这些小计进行求和。

然而,更好的解决方案是压缩子列表 - 最好使用itertools.chain.from_iterable()来实现。

sum(itertools.chain.from_iterable(phonelist))

这是一个最佳解决方案,因为这意味着您不必执行大量单独的求和操作,也无需创建中间列表。如果您的数据是一个懒惰的源,它也将懒惰地工作,使您的代码更具内存效率并扩散处理负载。