clase dllist del módulo llist en Python

llist es un módulo de extensión de CPython que proporciona una estructura de lista enlazada básica. Son significativamente más rápidos que quitar la cola e incluso que la lista estándar.

Lista doblemente enlazada

Es un tipo de lista enlazada en la que cada Node almacena datos, así como dos direcciones (la dirección de los Nodes que le siguen y la preceden). Una definición mucho más simple sería que en una lista doblemente enlazada cada Node apunta al Node anterior y también al Node inmediatamente posterior.
El siguiente diagrama lo explica mejor:

En llist, hay un objeto dllist que ayuda a implementar con éxito una lista doblemente enlazada.

Objetos de la lista de detalles

class llist.dllist([iterable])
devuelve una nueva lista doblemente enlazada inicializada a partir de los iterables proporcionados. Si no se proporcionan iterables, la lista enlazada se produce pero está vacía.

import llist
from llist import dllist
  
lst = llist.dllist(['first', 'second', 'third'])
print(lst)

Producción:

dllist([first, second, third])

dllist admite los siguientes atributos:

  • primero : atributo de solo lectura, imprime el primer atributo de la lista y Ninguno si la lista está vacía

    print(lst.first)

    Producción:

    dllistnode(first)
  • last : propiedad de solo lectura, devuelve el último elemento de la lista (cola) y Ninguno si la lista está vacía.

    print(lst.last)

    Producción:

    dllistnode(third)
  • tamaño : atributo de solo lectura que devuelve el tamaño de la lista

    print(lst.size)

    Producción:

    3

dllist también admite los siguientes métodos:

  • append(x) : agrega x al lado derecho de la lista y devuelve un Node dllist insertado. Si x ya es un Node dlist, se crea un nuevo Node y se inicializa con el valor extraído de x.

    lst.append('fourth')
    print(lst)

    Producción:

    dllist([first, second, third, fourth])
  • appendleft(x) : agrega x al lado izquierdo de la lista y devuelve un Node dllist insertado. Si x ya es un Node dllist, se crea un nuevo Node y se inicializa con el valor extraído de x.

    lst.appendleft('fourth')
    print(lst)

    Producción:

    dllist([fourth, first, second, third])
  • appendright(x) : agrega x al lado derecho de la lista y devuelve un Node dllist insertado. Si x ya es un Node dllist, se crea un nuevo Node y se inicializa con el valor extraído de x.

    lst.appendright('fourth')
    print(lst)

    Producción:

    dllist([first, second, third, fourth])
  • clear() : elimina todos los Nodes de la lista

    lst.clear()
    print(lst)

    Producción:

    dllist()
  • extend([iterable]) : agrega elementos del iterable al lado derecho de la lista.

    lst.extend(['fourth', 'fifth'])
    print(lst)

    Producción:

    dllist([first, second, third, fourth, fifth])
  • extendleft([iterable]) : agrega elementos del iterable al lado izquierdo de la lista

    lst.extendleft(['fourth', 'fifth'])
    print(lst)

    Producción:

    dllist([fifth, fourth, first, second, third])
  • extendright([iterable]) : agrega elementos del iterable al lado derecho de la lista

    lst.extendright(['fourth', 'fifth'])
    print(lst)

    Producción:

    dllist([first, second, third, fourth, fifth])
  • insert() : agrega el elemento provisto al lado derecho de la lista. Por lo general, se usa para insertar elementos en cualquier punto de la lista y para eso se debe proporcionar el elemento que debe insertarse antes.

    lst.insert('fourth')
    node = lst.nodeat(2)
    lst.insert('fifth', node)
    print(lst)

    Producción:

    dllist([first, second, fifth, third, fourth])
  • nodeat(index) : devuelve el Node en el índice especificado. Se permiten direcciones negativas.

    print(lst.nodeat(2))
    print(lst.nodeat(-2))

    Producción:

    dllistnode(third)
    dllistnode(second)
  • pop() : elimina y devuelve el valor de un elemento del lado derecho de la lista.

    lst.pop()
    print(lst)

    Producción:

    dllist([first, second])
  • popleft() : elimina y devuelve el valor de un elemento del lado izquierdo de la lista.

    lst.popleft()
    print(lst)

    Producción:

    dllist([second, third])
  • popright : elimina y devuelve el valor de un elemento del lado derecho de la lista.

    lst.popright()
    print(lst)

    Producción:

    dllist([first, second])
  • remove() : elimina el Node especificado de la lista y devuelve el elemento almacenado en él.

    node = lst.nodeat(1)
    lst.remove(node)
    print(lst)

    Producción:

    dllist([first, third])
  • rotar (n) : si n es positivo, gira la lista n pasos a la derecha, pero si es negativo, la gira n pasos a la izquierda

    lst.rotate(4)
    print(lst)

    Producción:

    dllist([third, first, second])

Además de estos métodos, dllist admite iteración, cmp(lst1, lst2), operadores de comparación enriquecidos, tiempo constante len(lst), hash(lst) y referencias de subíndice lst[1234] para acceder a elementos por índice.

Analicemos más a fondo más objetos de llist que están relacionados con dllist:

1) Node de lista dll

Implementa un Node en una lista doblemente enlazada que se puede inicializar opcionalmente si se proporciona un valor.

node = llist.dllistnode('zeroth')
print(node)

Producción:

dllistnode(zeroth)

Este objeto también admite los siguientes atributos:

  • siguiente : atributo de solo lectura, imprime el siguiente Node en la lista
  • prev : atributo de solo lectura, imprime el Node anterior en la lista
  • value : imprime el valor almacenado en la lista
node = lst.nodeat(1)
print(node.next)
print(node.prev)
print(node.value)

Producción:

dllistnode(third)
dllistnode(first)
second

2) dllistidor

Devuelve un nuevo iterador de lista doblemente enlazada. Estos objetos no los crean los usuarios, sino que los devuelve el método dllist.__iter__() para mantener el estado de iteración. La iteración a través de la interfaz dllistiterator generará directamente valores almacenados en los Nodes.

import llist
from llist import dllist
  
lst = llist.dllist(['first', 'second', 'third'])
  
for value in lst:
  print(value)

Producción:

first
second
third

Publicación traducida automáticamente

Artículo escrito por vanshikagoyal43 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *