2016-07-24 8 views
0

Ich möchte Elemente in einer Liste alle zehn Elemente hinzufügen. Zum Beispiel:Hinzufügen bestimmter Elemente der Liste

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] 

Deshalb mag ich mit der Summe von jeweils 10 Elementen, wie eine neue Liste erstellen:

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

Wo der erste Eintrag entspricht den aufsummieren der ersten 10 Nummern :

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

die zweite zu den 10-Zahlen im Bereich 10-19:

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

Und so weiter; Gibt es einen effizienten Weg, dies zu tun?

+0

Mögliche Duplikat [? Wie verteilen Sie eine Liste in gleichmäßig große Stücke in Python] (http://stackoverflow.com/questions/312443/how-do-you-split -a-list-in-gleichgroße-chunks-in-python) – Mureinik

Antwort

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

Gut gemacht. Wo oder wie haben Sie über den 'zip (* [iter (a)] * 10)' erfahren? –

2

Verwenden map auf einem Iterator der Liste:

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

einen Iterator für Ihre Liste erstellen. Übergeben Sie die Elemente mit dem Iterator in 10 Sekunden an map und verwenden Sie map, um die sum der übergebenen Parameter zurückzugeben.

Python 3.x wird eine explizite list Anruf auf map

1

benötigen Sie verschachtelte Comprehensions mit einer Liste Iterator verwenden können:

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

Beachten Sie, dass diese still alle übrig gebliebenen Werte ignorieren:

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

Wie wäre es mit Liste compreh ension, wie diese:

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