Lösung
Ja, du kannst:
l = L[1::2]
Und das ist alles. Das Ergebnis enthält die Elemente, die an den folgenden Positionen platziert sind ( 0
-basiert, sodass sich das erste Element an der Position befindet 0
, das zweite an der Position 1
usw.):
1, 3, 5
Das Ergebnis (tatsächliche Zahlen) lautet also:
2, 4, 6
Erläuterung
Das [1::2]
am Ende ist nur eine Notation für das Aufteilen von Listen. Normalerweise ist es in der folgenden Form:
some_list[start:stop:step]
Wenn wir dies weglassen start
, wird default ( 0
) verwendet. Daher würde das erste Element (an Position 0
, da die Indizes 0
basieren) ausgewählt. In diesem Fall wird das zweite Element ausgewählt.
Da das zweite Element weggelassen wird, wird der Standard verwendet (das Ende der Liste). Die Liste wird also vom zweiten Element bis zum Ende wiederholt .
Wir haben auch das dritte Argument ( step
) angegeben 2
. Das heißt, ein Element wird ausgewählt, das nächste wird übersprungen und so weiter ...
Zusammenfassend [1::2]
bedeutet dies in diesem Fall :
- Nehmen Sie das zweite Element (das übrigens ein ungerades Element ist, wenn Sie nach dem Index urteilen).
- ein Element überspringen (weil wir haben
step=2
, also überspringen wir eines, im Gegensatz zu step=1
dem , was standardmäßig ist),
- nimm das nächste Element,
- Wiederholen Sie die Schritte 2.-3. bis das Ende der Liste erreicht ist,
EDIT : @PreetKukreti gab einen Link für eine andere Erklärung auf Python Liste Slicing - Notation. Siehe hier: Erklären Sie Pythons Slice-Notation
Extras - Zähler durch ersetzen enumerate()
In Ihrem Code erstellen und erhöhen Sie den Zähler explizit. In Python ist dies nicht erforderlich, da Sie einige iterable mithilfe von enumerate()
:
for count, i in enumerate(L):
if count % 2 == 1:
l.append(i)
Das Obige dient genau dem gleichen Zweck wie der von Ihnen verwendete Code:
count = 0
for i in L:
if count % 2 == 1:
l.append(i)
count += 1
Weitere Informationen zum Emulieren von for
Schleifen mit Zähler in Python: Zugriff auf den Index in Python 'for'-Schleifen