Usar lista circular en Python

Olorunfemi Akinlua 21 junio 2023
  1. Use itertools.cycle para usar la lista circular en Python
  2. Use generadores para usar la lista circular en Python
Usar lista circular en Python

Una lista enlazada regular tiene un nodo raíz donde cada nodo tiene un puntero al siguiente nodo y un dato excepto el último nodo, que no tiene un siguiente nodo (por lo que tiene un valor Nulo) que nos dice que ese es el último nodo. Sin embargo, en una lista enlazada circular, el último nodo tiene un puntero al primer nodo de la lista.

Entonces, las listas enlazadas circulares son listas enlazadas estructuradas de tal manera que todos los nodos dentro de dicha estructura forman un círculo. Esta estructura de datos lineal y dinámica cuyos nodos no pueden ser Ninguno; tiene el último nodo conectado al primer nodo, por lo que cada nodo puede conducir al anterior o al siguiente, y así sucesivamente.

Normalmente, un objeto iterador nos permite pasar de un elemento a otro dentro de una estructura de datos de lista o diccionario. Con una lista circular, la conexión entre cada nodo lo permite especialmente usando funciones integradas.

Este artículo analiza la implementación y el uso de una lista circular en Python, de forma nativa o con módulos.

Use itertools.cycle para usar la lista circular en Python

Python tiene un módulo incorporado llamado itertools que permite secuencias con iteradores y bucles funcionales. Dentro de este módulo, los iteradores (métodos) ayudan a desarrollar sistemas eficientes para recorrer diferentes contextos, desde secuencias de entrada cortas hasta escenarios combinatorios.

Más importante de usar, sin embargo, es el iterador cycle() que es un iterador infinito que toma una lista y la itera infinitamente.

Esto ocurre al crear un iterador que devuelve sus elementos y copia cada elemento del iterable. Luego, devuelve los elementos de la copia guardada después de que finaliza el iterable.

Para usar el módulo itertools y el método cycle(), hacemos uso de esta sentencia import:

from itertools import cycle

Todo lo que tenemos que hacer desde aquí es pasar una lista al método cycle(), y tenemos una lista enlazada circular. Además, podemos usar una función integrada, next(), para acceder y devolver el siguiente elemento o nodo del iterador, que es la lista enlazada circular.

from itertools import cycle

numList = ["one", "two", "three", "four", "five"]

circularList = cycle(numList)

print(next(circularList))
print(next(circularList))

Producción :

one
two

Entonces, con el método next(), podemos avanzar fácilmente el iterador uno por uno en lugar de usar el ciclo for, que se repite para siempre.

from itertools import cycle

numList = ["one", "two", "three", "four", "five"]

circularList = cycle(numList)

for num in circularList:
    print(num)

Producción :

one
two
three
four
five
one
two
three
four

Use generadores para usar la lista circular en Python

Con los generadores, podemos crear iteraciones y funciones que devuelven un iterador sobre el que podemos iterar. A diferencia de las funciones típicas en las que usamos declaraciones de retorno, usamos las declaraciones de rendimiento en generadores.

A diferencia de las declaraciones return, la declaración yield detiene la función, guarda todas sus variables de entorno (o estado) y lleva una después de eso con llamadas posteriores. Además, una función generadora puede contener una declaración de retorno y más de una declaración de rendimiento.

Para crear una lista circular, podemos usar la sentencia yield para guardar el estado de la función y esperar llamadas sucesivas.

def circular(args):
    while True:
        for element in args:
            yield element


numList = ["one", "two", "three", "four", "five"]

circularList = circular(numList)
print(circularList)

Producción :

<generator object circular at 0x0000018AFFD39A10>

Con la función generadora llamada circular(), podemos pasarle un argumento iterable. Se repite para siempre usando la instrucción while True, pero puede pausar la función para devolver el estado actual (lo que significa el elemento o nodo actual en el que se encuentra) y continuar cuando se haya realizado otra llamada.

Esto nos ayuda a crear una lista circular.

Puede usar el método next() para recuperar el siguiente elemento dentro de la lista circular.

def circular(args):
    while True:
        for element in args:
            yield element


numList = ["one", "two", "three", "four", "five"]

circularList = circular(numList)

print(next(circularList))
print(next(circularList))

Producción :

one
two

O bucle infinito también.

def circular(args):
    while True:
        for element in args:
            yield element


numList = ["one", "two", "three", "four", "five"]

circularList = circular(numList)

for i in circularList:
    print(i)

Producción :

one
two
three
four
five
one
two
Olorunfemi Akinlua avatar Olorunfemi Akinlua avatar

Olorunfemi is a lover of technology and computers. In addition, I write technology and coding content for developers and hobbyists. When not working, I learn to design, among other things.

LinkedIn

Artículo relacionado - Python List