Listar array por parejas

Arnau Sanchez pyarnau en gmail.com
Mar Jun 17 19:37:36 CEST 2008


Antoni Aloy escribió:

>>> Como obtengo en cada iteración de un array dos elementos en vez de uno,
>>> sabiendo que la lista tiene un número de elementos par?
 >
> A ver si esto te sirve
> x = [1,2,3,4]
> [(x[i],x[i+1]) for i in range(0, len(x)) if i % 2 == 0]

Con la misma idea:

[(x[2*i],x[2*i+1]) for i in xrange(len(x)/2)]

Hay que apuntar que si la intención es iterar sobre el resultado, en vez de una 
lista es preferible crear un generador:

[...] -> (...)

Propongo todavía otra forma usando las itertools:

http://docs.python.org/lib/itertools-recipes.html

from itertools import izip, chain, repeat

def grouper(n, iterable, padvalue=None):
     return izip(*[chain(iterable, repeat(padvalue, n-1))]*n)

list(grouper(2, x))

# [(1, 2), (3, 4)]

Si no necesitamos padding (la longitud del iterable es siempre múltiplo de n), 
podemos simplificar:

def grouper(n, iterable):
     return izip(*[iter(iterable))]*n)
_______________________________________________
Lista de correo Python-es 
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes





Más información sobre la lista de distribución Python-es