2011-06-21 16 views
11

En lugar de procesar elementos en función de su valor, necesito ejecutar una función basada en la posición del elemento. Este es un ejemplo de filtrado basado en el contenido de la lista.¿Cómo puedo filtrar solo los elementos de una lista que se encuentra en una posición pareja?

only_words = filter(str.isalpha, my_list) 

Quiero crear una rebanada de la lista que contiene sólo los elementos en la posición par, es decir:

new_list = [] 
pos = 0 
for item in my_list: 
    if pos % 2 == 0: 
     new_list.append(item) 

Esto es demasiado feo. Mejores sugerencias?

Respuesta

20

Puede utilizar esta: my_list[::2] (por extraño - my_list[1::2])

+0

que da las posiciones impares. Te refieres a 'mi_lista [:: 2]'. –

+0

¿Podría explicar esto? Es '::' un operador especial? Nunca vi algo como esto. – naeg

+0

@lazyr Gracias, siempre mezclo estas palabras. :-( – DrTyrsa

6
[v for k, v in enumerate(mylist) if k % 2 == 0] 
+1

El corte es mejor, pero' enumerate() 'necesita más amor. –

Cuestiones relacionadas