¿Dividir una lista a la mitad por índices pares e impares? [duplicar]

Posible duplicado:
Programa de Python para dividir una lista en dos listas con elementos alternos

Tengo una lista como esta:

list1 = [blah, 3, haha, 2, pointer, 1, poop, fire]

La salida que quiero es:

list = [3, 2, 1, fire]

Entonces, lo que quiero es hacer una lista de elementos pares de la lista anterior. Intenté usar un for e intenté eliminar el segundo elemento mientras los agregaba a la lista, pero no funcionó:

count = 0
for a in list1:
 list2.append(a)
 if count % 2 = = 1:
  list2.pop(count)

print list2

¿Alguna sugerencia?

preguntado el 28 de julio de 12 a las 16:07

Esta pregunta (y sus respuestas) son mejores y más genéricas que la pregunta de la que está marcada como duplicada. -

Y esta respuesta a una tercera pregunta es la mejor: stackoverflow.com/a/19153541/74291 -

3 Respuestas

Puede usar el corte de lista. El siguiente fragmento servirá.

list1 = ['blah', 3, 'haha', 2, 'pointer', 1, 'poop', 'fire']
listOdd = list1[1::2] # Elements from list1 starting from 1 iterating by 2
listEven = list1[::2] # Elements from list1 starting from 0 iterating by 2
print listOdd
print listEven

Salida

[3, 2, 1, 'fire']
['blah', 'haha', 'pointer', 'poop']

Respondido 28 Jul 12, 16:07

Esto debería darle lo que necesita: muestrear una lista a intervalos regulares desde un desplazamiento 0 o 1:

>>> a = ['blah', 3,'haha', 2, 'pointer', 1, 'poop', 'fire']
>>> a[0:][::2] # even
['blah', 'haha', 'pointer', 'poop']
>>> a[1:][::2] # odd
[3, 2, 1, 'fire']

Tenga en cuenta que en los ejemplos anteriores, la primera operación de división (a[1:]) demuestra la selección de todos los elementos del índice de inicio deseado, mientras que la segunda operación de corte (a[::2]) muestra cómo seleccionar todos los demás elementos de la lista.

Una operación de corte más idiomática y eficiente combina los dos en uno, a saber a[::2] (0 puede omitirse) y a[1::2], que evita la copia de lista innecesaria y debe usarse en el código de producción, como han señalado otros en los comentarios.

Respondido el 19 de diciembre de 16 a las 15:12

muchas gracias :) no sabía que existían este tipo de cosas! realmente ayudó - H. Choi

@H.Choi: esto se cubre muy temprano en cada tutorial, incluido el oficial. Te vas a perder muchas cosas interesantes si no lees uno... - DSM

¿Por qué [0:][::2] y [1:][::2] en lugar de [::2] y [1::2]? Esto copiará la lista innecesariamente. - remitente

-1 con esta sintaxis. Es innecesario y no ideomático. Usa el segmento idiomático de Python [::2] para incluso y [1::2] por impar. - dawg

Creo que la respuesta a continuación es más fácil de entender. Combinar dos conceptos en una respuesta me confundió. - ray salemi

Simplemente puede dividir la lista: Para impares: a[1::2] Incluso para : a[::2]

Respondido 28 Jul 12, 16:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.