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