2016-06-03 23 views
4

Meine Daten ist eine Liste von Listen von Listen unterschiedlicher Größe:2. Listenelemente Fasst in einer Liste von Listen von Listen

data = [[[1, 3],[2, 5],[3, 7]],[[1,11],[2,15]],.....]]] 

Was ich tun möchte, ist eine Liste von Listen mit den Werten der Rück 2.es Element jeder Liste von Listen zusammengefasst - so, 3 + 5 + 7 eine Liste ist, so 11 + 15, etc:

newdata = [[15],[26],...] 

Oder auch nur eine Liste der Summen wäre schön, wie ich nehmen kann es von dort:

newdata2 = [15,26,...] 

Ich habe versucht, Zugriff auf die Elemente in der Liste durch verschiedene Formen und Strukturen der Liste Comprehensions, aber ich kann nicht bekommen, um es in das gewünschte Format zu bekommen.

+0

Können Sie uns zeigen den Code, den Sie bisher geschrieben haben, während das Problem zu lösen? –

Antwort

7

Versuchen Sie, diesen einzeiligen Ansatz Liste Verständnis:

[sum([x[1] for x in i]) for i in data] 

Ausgang:

data = [[[1, 3],[2, 5],[3, 7]],[[1,11],[2,15]]] 
[sum([x[1] for x in i]) for i in data] 
Out[19]: [15, 26] 

Wenn Sie die Ausgabe, um eine Liste der Liste wollen, dann verwenden

[[sum([x[1] for x in i])] for i in data] 
+2

Ich denke, das OP will es nur eine Ebene tiefer, also '[[sum ([x [1] für x in i))] für i in Daten]'. Trotzdem +1 ... –

+0

@WillemVanOnsem, danke für den hilfreichen Kommentar und die Antwort bearbeitet. – MaThMaX

3

So etwas ist ziemlich kurz und prägnant, Listenkomprehensionen mit und map (Ich versuche, nicht verschachtelten Comprehensions zu verwenden, wenn ich es vermeiden kann)

import operator 

f = operator.itemgetter(1) 
[sum(map(f, x)) for x in data] 
4

@mathmax und @BrendanAbel haben Pythonic und performante Lösungen angeboten. Allerdings möchte ich aus Gründen seiner Kürze und trickyness dieses Transpositions Ansatz in den Ring werfen:

[sum(zip(*x)[1]) for x in data]