[pyar] Lista rotativa que siempre devuelve un item

claudio canepa ccanepacc en gmail.com
Sab Jun 11 04:41:02 ART 2011


2011/6/11 claudio canepa <ccanepacc en gmail.com>

>
>
> 2011/6/11 Pablo Seminario <pabluk en gmail.com>
>
>> Hola a todos,
>>
>> Ayer tuve un duda sobre un problema que tenía que resolver con una lista
>> de valores que uso dentro de un bucle for/while(que no depende de los
>> valores de la lista), y para la cual siempre tengo que extraer un valor de
>> la lista, pero en cada ciclo del bucle tengo que obtener el elemento que
>> sigue al del ciclo anterior, excepto si es el fin de la lista y en ese caso
>> re comienza con el primer elemento de la lista.
>> Mas o menos sería como tener una estructura queue pero rotanto los
>> elementos de la lista.
>> Acá esta un ejemplo de como lo resolví por ahora:
>>
>>
>> lista = ['a', 'b', 'c']
>>
>> for i in range(10):
>>    item = lista.pop()
>>    lista.insert(0, item)
>>
>>    print item
>>
>>
>> La pregunta es si hay alguna forma mas pythonica de resolverlo?
>>
>> Saludos
>>
>> --
>>
>
>
> Depende de cuales son los valores que necesites en el bucle.
>
> si lo unico que importa es item, haria
>
> for i in xrange(10):
>    item = lista[i%len(lista)]
>    print item
>
> que ahorra sacar e insertar en la lista (insertar es caro para list si
> estas lejos del final).
>
> Si el valor que necesitas es la lista, usaria deque del modulo collections
> , es de la libreria standard desde python 2.4
>
> Para rotar se usa el metodo rotate de la deque.
>
> --
> claudio
>

perdon, me olvide de invertir el sentido de recorrido, el for deberia ser

for i in xrange(10):
   item = lista[ len(lista) - 1 - i%len(lista)]
   print item

A esta hora no se me ocurre una expresion mas linda
buenas noches !
--
claudio
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20110611/9268db74/attachment.html>


More information about the pyar mailing list