2016-07-24 140 views
0

我想每十個元素在列表中添加元素。例如:添加列表中的某些元素

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個號碼中的範圍10-19:

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

等;有沒有一種有效的方法來做到這一點?

+0

可能的複製[?你怎麼分割成列表在Python均勻大小的塊(http://stackoverflow.com/questions/312443/how-do-you-split -a-list-into-uniformity-sized-chunk-in-python) – Mureinik

回答

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

幹得好。你在什麼地方或者如何學習了zip(* [iter(a)] * 10)'? –

2

在列表的迭代器使用map

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

創建列表的迭代器。使用迭代器在10秒內將項目傳遞給map,並使用map返回傳遞參數的sum

Python 3.x都有將需要map

1

明確list電話您可以使用嵌套的內涵與列表迭代器:

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] 
1

list compreh ension,像這樣的:中

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