簡體   English   中英

python reduce:查找元組列表中所有列表的總大小

[英]python reduce: find total size of all lists inside list of tuples

我的數據結構如下所示

itemsData = [('data1', [1, 2, 3, 4]), ('data2', [1, 2]), ('data3', [1, 2, 3])]

我想在上面的元組列表中找到項目總數。 對於上面的例子,len([1,2,3,4] + len([1,2])+ len([1,2,3])= 9

reduce(lambda x,y: len(x[1]) + len(y[1]), itemsData )

我得到的錯誤是

TypeError: 'int' object has no attribute '__getitem__'

你可以試試:

sum([len(elem[1]) for elem in itemsData])

例如

>>> itemsData = [('data1', [1, 2, 3, 4]), ('data2', [1, 2]), ('data3', [1, 2, 3])]
>>> sum([len(elem[1]) for elem in itemsData])
9

我將解釋為什么你的代碼不起作用

來自https://docs.python.org/2/library/functions.html#reduce

左參數x是累加值,右參數y是迭代的更新值

所以在第一次迭代中,你的代碼len(x[1]) + len(y[1])起作用,因為x=('data1', [1, 2, 3, 4])y=('data2', [1, 2]) ,結果是6

但是在第二次迭代中,得到x=6y=('data3', [1, 2, 3])] ,因此len(x[1])無效。

使用reduce的正確代碼是

reduce(lambda x,y: x+len(y[1]), itemsData, 0)

這是有效的

1st iteration ... x = 0, y = ('data1', [1, 2, 3, 4]), result = 4
2nd iteration ... x = 4, y = ('data2', [1, 2]), result = 6
3rd iteration ... x = 6, y = ('data3', [1, 2, 3]), result = 9

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM