2016-08-04 3 views
2

Was ich versuche zu tun ist, extrahieren nullstes Element in einer Liste und erstes Element in einer anderen Liste der gegebenen zweidimensionalen Liste.Python: Kann dies in einer einzigen Liste Verständnis Anweisung getan werden

baseball = [[180, 78.4], 
      [215, 102.7], 
      [210, 98.5], 
      [188, 75.2]] 

x = [ a[0] for a in baseball ] 
y = [ a[1] for a in baseball ] 
print x 
print y 

Kann dies in einer einzigen Liste Verständnis Aussage getan werden?

Antwort

2

Unter der Annahme, es rechteckig ist (dh die Länge der inneren Listen ist konsistent.), Können Sie implementieren die folgenden:

def transpose(matrix): 
    return [[matrix[j][i] for j in range(len(matrix))] for i in range(len(matrix[0]))] 

Dann Ihr Problem ist nur einen Anruf transponieren (x, y = transpose(baseball)).

+0

danke funktioniert perfekt – Athar

2

Wenn Sie nichts dagegen haben, Tupeln:

baseball = [[180, 78.4], 
      [215, 102.7], 
      [210, 98.5], 
      [188, 75.2]] 


x,y = zip(*baseball) 

Wenn Sie wirklich Listen wollen:

x,y = map(list,zip(*baseball)) 

Wenn Sie hatte mehr als zwei Elemente in jeder und wollte nur bestimmte Elemente wie:

baseball = [[180, 1, 78.4], 
      [215, 2, 102.7], 
      [210, 3, 98.5], 
      [188, 4, 75.2]] 

from operator import itemgetter 

x, y = zip(*map(itemgetter(0, 2), baseball)) 

Das würde Ihnen geben:

((180, 215, 210, 188), (78.4, 102.7, 98.5, 75.2)) 
+0

Standard warning: 'zip (* baseball)' wird nicht die transponierung tun, die du suchst, wenn 'baseball' leer ist. – user2357112

+0

danke, funktionierte perfekt, aber suchte nach der Lösung mit List-Verständnis – Athar

Verwandte Themen