Python 添加列表的某些元素

Python 添加列表的某些元素,python,list,sum,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]

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

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

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

在列表的迭代器上使用
map

>>> it = iter(a)
>>> map(lambda *x: sum(x), *(it,)*10)
[187, 237, 300, 197, 174, 282]
为列表创建迭代器。使用迭代器在10秒内将项目传递到
map
,并使用
map
返回传递参数的
sum


Python3.x将需要一个显式的
list
调用
map

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

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]

a=[1]*11#列表理解如何,比如:

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

可能重复做得好。您在哪里或如何了解
zip(*[iter(a)]*10)
>>> step = 10
>>> 
>>> [sum(a[x:x+step]) for x in range(0, len(a), step)]
[187, 237, 300, 197, 174, 282]