任何人都可以给我一个提示如何聚合(总结)多个列表的特定元素吗?
例如,我有20个名称模式类似的名单,每个名单代表相应家庭(代理人)的消费支出(即指数):
c_agent_0 = [10.0, 11.0, ...]
.
.
.
c_agent_19 = [8.0, 9.0, ...]
我需要像c_agent _ * [whatever]
这样的值=索引之和谢谢!
答案 0 :(得分:5)
使用zip将“合并”列表合并为单个列表,然后对每个索引求和元素:
c_agent_0 = [10.0, 11.0, 12.0, 13.0, 14.0]
c_agent_1 = [1.1, 12.3, 14.2, 13.2, 14.3]
c_agent_2 = [1.4, 12.1, 14.5, 13.1, 14.2]
zipped_list = zip(c_agent_0, c_agent_1, c_agent_2)
print zipped_list
print [sum(item) for item in zipped_list]
打印
[(10.0, 1.1, 1.4), (11.0, 12.3, 12.1), (12.0, 14.2, 14.5), (13.0, 13.2, 13.1), (14.0, 14.3, 14.2)]
[12.5, 35.4, 40.7, 39.3, 42.5]
答案 1 :(得分:2)
如果要对所有列进行此操作,那么alecxe's answer最好,如果您只需要一个(或子集),那么它有点浪费,因为它做了很多不必要的处理。
对于单个列(在本例中为第三列):
sum([c_agent[2] for c_agent in c_agents])
我们使用内置的sum()
求和,以及一个简单的list comprehension来获取每个列表中的第n个项目。
如我的评论中所述,这假设您有一个列表列表,而不是一堆变量:
c_agents = [c_agent_0, c_agent_1, ...]
有效地使用数据结构将使您的代码更好,更好。
前面提到的基于zip()
的解决方案也可以轻松修改以使用此数据结构:
[sum(column) for column in zip(*c_agent_s)]
这里我们使用*
运算符将列表解压缩为zip()
的参数。
答案 2 :(得分:1)
您可以创建列表列表,然后使用numpy数组:
import numpy as np
c_agent_0 = [10.0, 11.0, 12.0]
c_agent_1 = [13.0, 14.0, 15.0]
c_agent_2 = [16.0, 17.0, 18.0]
mylist = [c_agent_0, c_agent_1, c_agent_2]
mylist = sum(map(np.array, mylist))
print mylist[0]
请注意,列表理解最有可能更快;这只是一个numpy的解决方案:)。