[英]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.