2016-07-19 11 views
-2

In Python zu bekommen, habe ich vonWie das erste Element einer komplexen Liste in Python

a = [[0, 1], [2, 3]] 
a[:][0] 
# [0, 2] 

Jetzt erstem Elemente einer 2-D-Liste zu erhalten, die Liste ist eine Art Komplex, der Weg zu Holen Sie sich die ersten Elemente funktioniert nicht

a = [['sad', 1], ['dsads', 2]] 
a[:][0] 
# ['sad', 1] 

Ich weiß nicht, was ist der Unterschied hier. Und wie die ersten Elemente auf diese einfache Weise zu erhalten, anstatt

[e[0] for e in a] 
+0

Wie Sie bekam 'a [:] [0]' als '[0,2]'? –

+4

Das erste Snippet kann Ihnen möglicherweise dieses Ergebnis nicht geben. –

+0

"... Ich habe das erste Element einer 2-d-Liste bekommen ..." Nein, hast du nicht. –

Antwort

4

Sie in-built zip verwenden:

Aggregate Elemente aus jeder der Iterables

a = [['sad', 1], ['dsads', 2]] 
zip(*a)[0] 

#results : 
('sad', 'dsads') 

Sie können das Endergebnis bei Bedarf aus dem Tupel in die Liste konvertieren. * wird verwendet, um die Liste in ihre Elemente zu reduzieren - zip akzeptiert iterables als Positionsargumente. zip ist eine Art Matrixtransposition.

Wie gesagt, Ihre erste Lösung (a[:][0]) ist nicht korrekt, es dauert nur das erste Element der Liste. Hier müssen Sie zuerst die Liste so umwandeln, dass jedes erste Element in eine separate Liste gruppiert wird, usw. für das zweite, dritte .. Elemente. Dann nimm das erste Element.

Update:

Von @ rawing Kommentar: Wenn die Liste sehr groß ist, sollten Sie

next(itertools.izip(*a)) 

Verwendung Dies ist die Iterator-Version - das nimmt das Listenelement nur bei Bedarf. In diesem Fall konstruiert es jedes Element des Ergebnisses einzeln, da wir das erste Element benötigen, verwenden wir next ein einziges Mal, um das nächste (also das erste hier) Element des Iterators zu erhalten.

+2

Wenn die Liste sehr groß ist, erwäge stattdessen 'next (itertools.izip (* a)) ''. –

+0

@Rawing ist richtig. Python-2.7 verwendet standardmäßig keine Iteratoren, daher ist die 'itertools'-Version besser. Auch das 'six'-Modul könnte verwendet werden, um die Kompatibilität zwischen iterables-Präferenzen von python2 und python3 zu garantieren. – frist

1

Mit numpy:

>>> a = [['sad', 1], ['dsads', 2]] 

>>> import numpy 

>>> my_array = numpy.array(a) 

>>> print my_array[:,0] 
['sad' 'dsads'] 
Verwandte Themen