添加列表的某些元素

时间:2016-07-24 16:00:49

标签: python list sum

我想每十个元素在列表中添加元素。例如:

a = [5, 31, 16, 31, 19, 5, 25, 34, 8, 13, 17, 17, 43, 9, 29, 41, 8, 24,
48, 1, 28, 20, 37, 40, 32, 35, 9, 36, 17, 46, 10, 30, 49, 28, 2, 3, 8,
11, 36, 20, 7, 24, 29, 15, 0, 4, 35, 11, 42, 7, 28, 40, 31, 45, 6, 45,
15, 27, 39,  6]

所以我想创建一个包含每10个元素之和的新列表,例如:

new = [187, 237, 300, 197, 174, 282]

第一个条目对应前10个数字的加起来:

x = sum(5, 31, 16, 31, 19, 5, 25, 34, 8, 13)
x = 187

第二个到10-19范围内的10个数字:

y = sum(17, 17, 43, 9, 29, 41, 8, 24, 48, 1)
y = 237

等等;有没有一种有效的方法来做到这一点?

4 个答案:

答案 0 :(得分:3)

In [25]: map(sum, zip(*[iter(a)]*10))
Out[25]: [187, 237, 300, 197, 174, 282]

答案 1 :(得分:2)

在列表的迭代器上使用map

>>> it = iter(a)
>>> map(lambda *x: sum(x), *(it,)*10)
[187, 237, 300, 197, 174, 282]

为列表创建一个迭代器。使用迭代器将项目传递给10s中的map,然后使用map返回传递参数的sum

Python 3.x需要在list

上进行明确的map调用

答案 2 :(得分:1)

您可以将嵌套的理解与列表迭代器一起使用:

i= iter(a)
s= [sum(next(i) for _ in range(10)) for _ in range(len(a)//10)]
print s

请注意,这将默认忽略任何剩余的值:

a= [1]*11 #<- list has 11 elements
i= iter(a)
s= [sum(next(i) for _ in range(10)) for _ in range(len(a)//10)]
print s
# output: [10]

答案 3 :(得分:1)

列表理解怎么样,像这样:

>>> step = 10
>>> 
>>> [sum(a[x:x+step]) for x in range(0, len(a), step)]
[187, 237, 300, 197, 174, 282]