Solução
Sim você pode:
l = L[1::2]
E isso é tudo. O resultado conterá os elementos colocados nas seguintes posições ( 0
com base em, portanto, o primeiro elemento está na posição 0
, o segundo em 1
etc.):
1, 3, 5
então o resultado (números reais) será:
2, 4, 6
Explicação
O [1::2]
no final é apenas uma notação para divisão de lista. Normalmente tem o seguinte formato:
some_list[start:stop:step]
Se omitimos start
, o default ( 0
) seria usado. Portanto, o primeiro elemento (na posição 0
, porque os índices são 0
baseados) seria selecionado. Neste caso, o segundo elemento será selecionado.
Como o segundo elemento foi omitido, o padrão está sendo usado (o final da lista). Portanto, a lista está sendo iterada do segundo elemento até o final .
Também fornecemos o terceiro argumento ( step
), que é 2
. O que significa que um elemento será selecionado, o próximo será ignorado e assim por diante ...
Então, para resumir, neste caso [1::2]
significa:
- pegue o segundo elemento (que, a propósito, é um elemento estranho, se você julgar pelo índice),
- pular um elemento (porque temos
step=2
, então estamos pulando um, ao contrário do step=1
que é padrão),
- pegue o próximo elemento,
- Repita as etapas 2.-3. até que o fim da lista seja alcançado,
EDIT : @PreetKukreti forneceu um link para outra explicação sobre a notação de fatiamento de lista do Python. Veja aqui: Explique a notação de fatia do Python
Extras - substituindo contador com enumerate()
Em seu código, você cria e aumenta explicitamente o contador. Em Python, isso não é necessário, pois você pode enumerar por meio de alguns iteráveis usando enumerate()
:
for count, i in enumerate(L):
if count % 2 == 1:
l.append(i)
O acima tem exatamente a mesma finalidade que o código que você estava usando:
count = 0
for i in L:
if count % 2 == 1:
l.append(i)
count += 1
Mais sobre emulação de for
loops com contador em Python: Acessando o índice em Python 'for' loops