Rozwiązanie
Tak, możesz:
l = L[1::2]
I to wszystko. Wynik będzie zawierał elementy umieszczone na następujących pozycjach ( 0
oparte na podstawie, więc pierwszy element jest na pozycji 0
, drugi na 1
itd.):
1, 3, 5
więc wynik (rzeczywiste liczby) będzie:
2, 4, 6
Wyjaśnienie
Na [1::2]
końcu jest tylko notacja do wycinania listy. Zwykle ma następującą postać:
some_list[start:stop:step]
Gdybyśmy pominęli start
, 0
użyto by domyślnej ( ). Zatem pierwszy element (na pozycji 0
, ponieważ indeksy są 0
oparte na indeksach ) zostałby wybrany. W tym przypadku wybrany zostanie drugi element.
Ponieważ pominięto drugi element, używany jest domyślny (koniec listy). Tak więc lista jest iterowana od drugiego elementu do końca .
Podaliśmy również trzeci argument ( step
), którym jest 2
. Co oznacza, że jeden element zostanie wybrany, następny zostanie pominięty i tak dalej ...
Podsumowując, w tym przypadku [1::2]
oznacza:
- weź drugi element (który, nawiasem mówiąc, jest elementem nieparzystym, jeśli sądzisz po indeksie),
- pomiń jeden element (ponieważ mamy
step=2
, więc pomijamy jeden , w przeciwieństwie do tego, step=1
który jest domyślny),
- weź następny element,
- Powtórz kroki 2.-3. aż do końca listy,
EDYCJA : @PreetKukreti podał link do innego wyjaśnienia na temat notacji cięcia list w Pythonie. Zobacz tutaj: Wyjaśnij notację wycinków w Pythonie
Dodatki - zamiana licznika na enumerate()
W swoim kodzie jawnie tworzysz i zwiększasz licznik. W Pythonie nie jest to konieczne, ponieważ możesz wyliczyć kilka iteracyjnych za pomocą enumerate()
:
for count, i in enumerate(L):
if count % 2 == 1:
l.append(i)
Powyższe służy dokładnie temu samemu celowi, co kod, którego używałeś:
count = 0
for i in L:
if count % 2 == 1:
l.append(i)
count += 1
Więcej na temat emulacji for
pętli z licznikiem w Pythonie: Dostęp do indeksu w pętlach „for” w Pythonie