2016-10-11 2 views
-1

Vielleicht wie (nur ein Pseudo-Code)Python: Wie bekomme ich die Listenlänge im Ausdruck des Listengenerators?

li = [1,2,3,4,5,6] 
a = [d for d in li if self.length<3] 
print a 
[1,2] 

Was für einen pythonic Weg ist, etwas zu tun?

+0

Länge? Ich denke du meinst Wert? –

+1

was ist 'selbst'? – ozgur

+0

Sie können nicht auf die Liste verweisen, die in einem Listenverständnis generiert wird. Warum nicht einfach "a = li [: 2]"? –

Antwort

3

Sie itertools.count() verwenden können, um zu verfolgen, wie viele Elemente, die Sie verwendet haben:

from itertools import count 

li = [1,2,3,4,5,6] 
c = count(1) # initialize to 1 
a = [d for d in li if next(c) < 3] # everytime you add an element 
print (a)       # in the comprehension `c` is incremented 

, die auf der Liste hinzugefügt Spur der Elemente hält, damit die Länge der Liste, die gibt:

[1, 2] 

wie mit einer Länge erwartet 2.

EDITED: einfacher Art und Weise, mit enumerate:

a = [d for idx, d in enumerate(li) if idx < 2] 
+1

steuern Bitte verwenden Sie die 'next()' Funktion, anstatt die '__next__' Methode direkt aufzurufen. 'next (c)' ist in Python 2 und 3 sowohl lesbarer als auch portabler. –

+1

Warum auch 'count()' verwenden, wenn Sie 'enumerate() 'verwenden können? Es besteht eine direkte Korrelation zwischen li und der Zählung. –

+1

Vielen Dank für diesen Tipp, es ist mir wirklich nicht in den Sinn gekommen, "aufzuzählen" wirklich einfach und bevorzugte Art und Weise. –

Verwandte Themen