pythonreduce:查找元组列表中所有列表的总大小

2024-10-02 22:35:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我的数据结构如下

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__'

Tags: 项目lambda数据结构reduce列表len错误int
2条回答

我会解释为什么你的代码不起作用

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

The left argument, x, is the accumulated value and the right argument, y, is the update value from the iterable

所以在第一次迭代中,你的代码 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

你可以试试:

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

相关问题 更多 >