[pyar] Iterar sobre pares

Fede Martinez federicoemartinez en gmail.com
Mar Jul 20 10:46:04 ART 2010


2010/7/20 Juanjo Conti <jjconti en gmail.com>

> 2010/7/20 Daniel Moisset <dmoisset en machinalis.com>
>
> 2010/7/20 Juanjo Conti <jjconti en gmail.com>:
>> >>>> grouper(2, range(8))
>> > <itertools.izip_longest object at 0xb7780a54>
>> >>>> list(grouper(2, range(8)))
>> > [(0, 1), (2, 3), (4, 5), (6, 7)]
>> >
>>
>> si lo que queres es la lista y no el iterador, podes ni siquiera usar
>> izip(y no te hace falta itertools), me parece mas simple que usar
>> list(izip(...)).
>>
>>
> Usé list solamente a los fines de mostrar el resultado aca en al lista, me
> quedo con el iterador.
>
>
>> con lo que te queda smiplificando algo como
>>
>> def group2(l):
>>    i = iter(l)
>>    return zip(i, i)
>>
>>
> Uuuuuuu que bueno este hack! Para los que no le prestaron atención les
> recomiendo que lo lean y lo entiendan. Es refrescante :)
>
> --
> Juanjo Conti
> blog: http://www.juanjoconti.com.ar
>
> _______________________________________________
> pyar mailing list pyar en python.org.ar
> http://listas.python.org.ar/listinfo/pyar
>
> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>



Me acabo de enterar que se puede hacer una cosa bien chancha con las listas
por comprension: cambiarlas por afuera mientras se van construyendo.

Advertencia: No intenten esto en sus codigos :P

par = False
def aparear(l,x):
      global par
      if par:
          y = l.pop()
          par = not par
          return (y,x)
      else:
          par = not par
          return x

l= range(10)
res = [ aparear(locals()["_[1]"],x) for x in l]
if len(l) % 2 != 0:
      res.pop()

for each in res:
      print each

>>>
(0, 1)
(2, 3)
(4, 5)
(6, 7)
(8, 9)
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20100720/6c3a2d51/attachment.html>


More information about the pyar mailing list