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