我想每十个元素在列表中添加元素。例如:
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
等等;有没有一种有效的方法来做到这一点?
答案 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]