Soluzione
Si, puoi:
l = L[1::2]
E questo è tutto. Il risultato conterrà gli elementi posizionati nelle seguenti posizioni ( 0-based, quindi il primo elemento è in posizione 0, il secondo in 1ecc.):
1, 3, 5
quindi il risultato (numeri effettivi) sarà:
2, 4, 6
Spiegazione
Alla [1::2]fine è solo una notazione per l'affettamento della lista. Di solito è nella seguente forma:
some_list[start:stop:step]
Se omettessimo start, 0verrebbe usato il default ( ). Quindi il primo elemento (in posizione 0, perché gli indici sono 0basati su -based) verrebbe selezionato. In questo caso verrà selezionato il secondo elemento.
Poiché il secondo elemento viene omesso, viene utilizzato il valore predefinito (la fine dell'elenco). Quindi l'elenco viene iterato dal secondo elemento alla fine .
Abbiamo anche fornito il terzo argomento ( step) che è 2. Ciò significa che verrà selezionato un elemento, il successivo verrà ignorato e così via ...
Quindi, per riassumere, in questo caso [1::2]significa:
- prendi il secondo elemento (che, a proposito, è un elemento strano, se giudichi dall'indice),
- saltare un elemento (perché ne abbiamo
step=2, quindi ne stiamo saltando uno, al contrario di quello step=1predefinito),
- prendi l'elemento successivo,
- Ripeti i passaggi 2.-3. fino alla fine della lista,
EDIT : @PreetKukreti ha fornito un collegamento per un'altra spiegazione sulla notazione di suddivisione dell'elenco di Python. Vedi qui: Spiega la notazione slice di Python
Extra: sostituzione del contatore con enumerate()
Nel tuo codice crei e aumenti esplicitamente il contatore. In Python questo non è necessario, poiché puoi enumerare tramite alcuni iterabili usando enumerate():
for count, i in enumerate(L):
if count % 2 == 1:
l.append(i)
Quanto sopra ha esattamente lo stesso scopo del codice che stavi usando:
count = 0
for i in L:
if count % 2 == 1:
l.append(i)
count += 1
Ulteriori informazioni sull'emulazione di forloop con counter in Python: Accesso all'indice in Python "for" loop