List - Listas
Las listas son estructuras de datos que permiten almacenar elementos de manera secuencial. En este módulo se encuentran implementaciones de listas, así como funciones para manipularlas.
Como usar la documentación
Para leer la guía de uso de la documentación, por favor diríjase a la sección Guía de documentación.
Elementos
list_node.py
Estructura de un nodo de lista encadenada. Un nodo de lista encadenada es un elemento que contiene un valor y una referencia al siguiente nodo.
- new_single_node(element)
Crea un nodo simple (de tipo list_node) con un elemento dado.
El nodo es creado con los siguientes atributos:
info: información del nodo, inicializada con el elemento dado.
next: Referencia al siguiente nodo, inicializada en None.
- Parameters:
element (any) – Elemento del nodo.
- Returns:
Nodo recien creado.
- Return type:
- Example:
# App/logic.py from DataStructures.List import list_node as ln # Crea un nodo con el elemento 1 nodo = ln.new_single_node({"nombre": "Juan", "edad": 20}) print(nodo) # Salida esperada: {'info': {"nombre": "Juan", "edad": 20}, 'next': None}
- get_element(node)
Retorna la información del nodo.
- Parameters:
node (list_node) – Nodo del cual se obtendrá la información.
- Returns:
Información del nodo.
- Return type:
any
- Example:
# App/logic.py from DataStructures.List import list_node as ln # Crea un nodo con el elemento 1 nodo = ln.new_single_node({"nombre": "Juan", "edad": 20}) print(nodo) # Salida esperada: {'info': {'nombre': 'Juan', 'edad': 20}, 'next': None} # Obtiene la información del nodo info = ln.get_element(nodo) print(info) # Salida esperada: {'nombre': 'Juan', 'edad': 20}
- get_next(node)
Retorna la referencia al siguiente nodo.
- Parameters:
node (list_node) – Nodo del cual se obtendrá la referencia al siguiente nodo.
- Returns:
Referencia al siguiente nodo.
- Return type:
- Example:
# App/logic.py from DataStructures.List import list_node as ln # Crea un nodo con el elemento información de Juan nodo = ln.new_single_node({"nombre": "Juan", "edad": 20}) print(nodo) # Salida esperada: {'info': {"nombre": "Juan", "edad": 20}, 'next': None} # Obtiene la referencia al siguiente nodo next_node = ln.get_next(nodo) print(next_node) # Salida esperada: None # Crea un nodo con el elemento información de Jairo nodo2 = ln.new_single_node({"nombre": "Jairo", "edad": 25}) nodo["next"] = nodo2 print(nodo) # Salida esperada: {'info': {"nombre": "Juan", "edad": 20}, 'next': {'info': {"nombre": "Jairo", "edad": 25}, 'next': None}} # Obtiene la referencia al siguiente nodo next_node = ln.get_next(nodo) print(next_node) # Salida esperada: {'info': {"nombre": "Jairo", "edad": 25}, 'next': None}
Implementaciones
array_list.py
- new_list()
Crea una lista (de tipo array_list) vacía.
La lista es creada con los siguientes atributos:
size: Tamaño actual de la lista, inicializado en 0.
elements: Lista de elementos, inicializada en una lista vacía.
- Returns:
Lista vacía recien creada.
- Return type:
- Example:
# App/logic.py from DataStructures.List import array_list as al # Crea una lista vacía lista = al.new_list() print(lista) # Salida esperada: {'size': 0, 'elements': []}
- Test Scenarios:
Inicialización: Se crea una lista vacía.
{ "size": 0, "elements": [] }
- is_empty(my_list)
Verifica si la lista está vacía.
Retorna
True
si la lista está vacía, en caso contrario retornaFalse
.- Parameters:
my_list (array_list) – Lista a verificar.
- Returns:
True
si la lista está vacía,False
en caso contrario.- Return type:
bool
- Example:
# App/logic.py from DataStructures.List import array_list as al # Crea una lista vacía lista = al.new_list() print(al.is_empty(lista)) # Salida esperada: True # Agrega un elemento a la lista lista = al.add_last(lista, 1) print(al.is_empty(lista)) # Salida esperada: False
- Test Scenarios:
Lista vacía: Se verifica si la lista está vacía.
# App/logic.py from DataStructures.List import array_list as al # Crea una lista vacía lista = al.new_list() print(al.is_empty(lista)) # Salida esperada: True
Lista con elementos: Se verifica si la lista con elementos está vacía.
# App/logic.py from DataStructures.List import array_list as al # Lista con elementos lista = al.new_list() lista = al.add_last(lista, 1) print(al.is_empty(lista)) # Salida esperada: False
- size(my_list)
Retorna el tamaño de la lista.
- Parameters:
my_list (array_list) – Lista de la cual se obtendrá el tamaño.
- Returns:
Tamaño de la lista.
- Return type:
int
- Example:
# App/logic.py from DataStructures.List import array_list as al # Crea una lista vacía lista = al.new_list() print(al.size(lista)) # Salida esperada: 0 # Agrega un elemento a la lista lista = al.add_last(lista, 1) print(al.size(lista)) # Salida esperada: 1
- Test Scenarios:
Lista vacía: Se obtiene el tamaño de la lista vacía.
# App/logic.py from DataStructures.List import array_list as al # Crea una lista vacía lista = al.new_list() print(al.size(lista)) # Salida esperada: 0
Lista con elementos: Se obtiene el tamaño de la lista con elementos.
# App/logic.py from DataStructures.List import array_list as al # Lista con elementos lista = al.new_list() lista = al.add_last(lista, 1) print(al.size(lista)) # Salida esperada: 1
- add_first(my_list, element)
Agrega un elemento al inicio de la lista.
Inserta el elemento al inicio de la lista y actualiza el tamaño de la lista en 1.
- Parameters:
my_list (array_list) – Lista a la cual se le agregará el elemento.
element (any) – Elemento a agregar.
- Returns:
Lista con el elemento agregado al inicio.
- Return type:
- Example:
# App/logic.py from DataStructures.List import array_list as al # Crea una lista vacía lista = al.new_list() print(lista) # Salida esperada: {'size': 0, 'elements': []} # Agrega un elemento al inicio lista = al.add_first(lista, 1) print(lista) # Salida esperada: {'size': 1, 'elements': [1]}
- Test Scenarios:
Agrega en una lista vacia: Se agrega un elemento al inicio de la lista vacía.
{ "size": 1, "elements": [1] }
Agrega en una lista con elementos: Se agrega un elemento al inicio de la lista con elementos.
# App/logic.py from DataStructures.List import array_list as al # Lista con elementos lista = al.new_list() lista = al.add_first(lista, 1) # Agrega un elemento al inicio lista = al.add_first(lista, 2) print(lista) # Salida esperada: {'size': 2, 'elements': [2, 1]}
- add_last(my_list, element)
Agrega un elemento al final de la lista.
Inserta el elemento al final de la lista y aumenta el tamaño de la lista en 1.
- Parameters:
my_list (array_list) – Lista a la cual se le agregará el elemento.
element (any) – Elemento a agregar.
- Returns:
Lista con el elemento agregado al final.
- Return type:
- Example:
# App/logic.py from DataStructures.List import array_list as al # Crea una lista vacía lista = al.new_list() print(lista) # Salida esperada: {'size': 0, 'elements': []} # Agrega un elemento al final lista = al.add_last(lista, 1) print(lista) # Salida esperada: {'size': 1, 'elements': [1]}
- Test Scenarios:
Agrega un elemento al final: Se agrega un elemento al final de la lista vacía.
{ "size": 1, "elements": [1] }
Agrega un elemento al final: Se agrega un elemento al final de la lista con elementos.
# App/logic.py from DataStructures.List import array_list as al # Lista con elementos lista = al.new_list() lista = al.add_last(lista, 1) # Agrega un elemento al final lista = al.add_last(lista, 2) print(lista) # Salida esperada: {'size': 2, 'elements': [1, 2]}
- first_element(my_list)
Retorna el primer elemento de una lista no vacía.
Retorna el primer elemento de la lista. Si la lista está vacía, lanza un error
IndexError: list index out of range
. Esta función no elimina el elemento de la lista.- Parameters:
my_list (array_list) – Lista de la cual se obtendrá el primer elemento.
- Returns:
Primer elemento de la lista.
- Return type:
any
- Example:
# App/logic.py from DataStructures.List import array_list as al # Crea una lista vacía lista = al.new_list() # Agrega un elemento al inicio lista = al.add_first(lista, 1) print(al.first_element(lista)) # Salida esperada: 1
- Test Scenarios:
Lista vacía: Lanza un error al intentar obtener el primer elemento de la lista vacía.
# App/logic.py from DataStructures.List import array_list as al # Crea una lista vacía lista = al.new_list() print(al.first_element(lista)) # Salida esperada: "IndexError: list index out of range"
Lista con elementos: Se obtiene el primer elemento de la lista con elementos.
# App/logic.py from DataStructures.List import array_list as al # Lista con elementos lista = al.new_list() lista = al.add_first(lista, 2) lista = al.add_first(lista, 1) print(al.first_element(lista)) # Salida esperada: 1
- last_element(my_list)
Retorna el último elemento de la lista no vacía.
Retorna el último elemento de la lista. Si la lista está vacía, lanza un error
IndexError: list index out of range
. Esta función no elimina el elemento de la lista.- Parameters:
my_list (array_list) – Lista de la cual se obtendrá el último elemento.
- Returns:
Último elemento de la lista.
- Return type:
any
- Example:
# App/logic.py from DataStructures.List import array_list as al # Crea una lista vacía lista = al.new_list() # Agrega un elemento al final lista = al.add_last(lista, 1) lista = al.add_last(lista, 2) print(al.last_element(lista)) # Salida esperada: 2
- Test Scenarios:
Lista vacía: Lanza un error al intentar obtener el último elemento de la lista vacía.
# App/logic.py from DataStructures.List import array_list as al # Crea una lista vacía lista = al.new_list() print(al.last_element(lista)) # Salida esperada: "IndexError: list index out of range"
Lista con elementos: Se obtiene el último elemento de la lista con elementos.
# App/logic.py from DataStructures.List import array_list as al # Lista con elementos lista = al.new_list() lista = al.add_last(lista, 1) print(al.last_element(lista)) # Salida esperada: 1
- get_element(my_list, pos)
Retorna el elemento en la posición dada.
Retorna el elemento en la posición
pos
, la cual debe ser igual o mayor a cero y menor al tamaño de la lista.0 <= pos < size(my_list)
. Si la posición no es válida, lanza un errorIndexError: list index out of range
. Esta función no elimina el elemento de la lista.- Parameters:
my_list (array_list) – Lista de la cual se obtendrá el elemento.
pos (int) – Posición del elemento a obtener.
- Returns:
Elemento en la posición dada.
- Return type:
any
- Example:
# App/logic.py from DataStructures.List import array_list as al # Crea una lista vacía lista = al.new_list() # Agrega un elemento al final lista = al.add_last(lista, 1) lista = al.add_last(lista, 2) print(al.get_element(lista, 1)) # Salida esperada: 2
- Test Scenarios:
Posición inválida: Se obtiene el elemento en una posición inválida.
# App/logic.py from DataStructures.List import array_list as al # Crea una lista vacía lista = al.new_list() print(al.get_element(lista, 0)) # Salida esperada: "IndexError: list index out of range"
Posición válida: Se obtiene el elemento en una posición válida.
# App/logic.py from DataStructures.List import array_list as al # Lista con elementos lista = al.new_list() lista = al.add_last(lista, 1) lista = al.add_last(lista, 2) print(al.get_element(lista, 1)) # Salida esperada: 2
- delete_element(my_list, pos)
Elimina el elemento en la posición dada.
Elimina el elemento en la posición
pos
, la cual debe ser igual o mayor a cero y menor al tamaño de la lista.0 <= pos < size(my_list)
. Si la posición no es válida, lanza un errorIndexError: list index out of range
.- Parameters:
my_list (array_list) – Lista de la cual se eliminará el elemento.
pos (int) – Posición del elemento a eliminar.
- Returns:
Lista con el elemento eliminado.
- Return type:
- Example:
# App/logic.py from DataStructures.List import array_list as al # Crea una lista vacía lista = al.new_list() # Agrega un elemento al final lista = al.add_last(lista, 1) lista = al.add_last(lista, 2) print(lista) # Salida esperada: {'size': 2, 'elements': [1, 2]} # Elimina el elemento en la posición 1 print(al.delete_element(lista, 1)) # Salida esperada: {'size': 1, 'elements': [1]}
- Test Scenarios:
Posición inválida: Se elimina el elemento en una posición inválida.
# App/logic.py from DataStructures.List import array_list as al # Crea una lista vacía lista = al.new_list() print(al.delete_element(lista, 0)) # Salida esperada: "IndexError: list index out of range"
Posición válida: Se elimina el elemento en una posición válida.
# App/logic.py from DataStructures.List import array_list as al # Lista con elementos lista = al.new_list() lista = al.add_last(lista, 1) lista = al.add_last(lista, 2) print(al.delete_element(lista, 1)) # Salida esperada: {'size': 1, 'elements': [1]}
- remove_first(my_list)
Elimina el primer elemento de la lista.
Elimina el primer elemento de la lista y disminuye el tamaño de la lista en 1. Si la lista está vacía, lanza un error
IndexError: list index out of range
.- Parameters:
my_list (array_list) – Lista de la cual se eliminará el primer elemento.
- Returns:
Elemento recien eliminado.
- Return type:
any
- Example:
# App/logic.py from DataStructures.List import array_list as al # Crea una lista vacía lista = al.new_list() # Agrega un elemento al final lista = al.add_last(lista, 1) lista = al.add_last(lista, 2) print(lista) # Salida esperada: {'size': 2, 'elements': [1, 2]} # Elimina el primer elemento print(al.remove_first(lista)) # Salida esperada: 1
- Test Scenarios:
Lista vacía: Lanza un error al intentar eliminar el primer elemento de la lista vacía.
# App/logic.py from DataStructures.List import array_list as al # Crea una lista vacía lista = al.new_list() print(al.remove_first(lista)) # Salida esperada: "IndexError: list index out of range"
Lista con elementos: Se elimina el primer elemento de la lista con elementos.
# App/logic.py from DataStructures.List import array_list as al # Lista con elementos lista = al.new_list() lista = al.add_last(lista, 1) lista = al.add_last(lista, 2) print(al.remove_first(lista)) # Salida esperada: 1
- remove_last(my_list)
Elimina el último elemento de la lista.
Elimina el último elemento de la lista y disminuye el tamaño de la lista en 1. Si la lista está vacía, lanza un error
IndexError: list index out of range
.- Parameters:
my_list (array_list) – Lista de la cual se eliminará el último elemento.
- Returns:
Elemento recien eliminado.
- Return type:
any
- Example:
# App/logic.py from DataStructures.List import array_list as al # Crea una lista vacía lista = al.new_list() # Agrega un elemento al final lista = al.add_last(lista, 1) lista = al.add_last(lista, 2) print(lista) # Salida esperada: {'size': 2, 'elements': [1, 2]} # Elimina el último elemento print(al.remove_last(lista)) # Salida esperada: 2
- Test Scenarios:
Lista vacía: Lanza un error al intentar eliminar el último elemento de la lista vacía.
# App/logic.py from DataStructures.List import array_list as al # Crea una lista vacía lista = al.new_list() print(al.remove_last(lista)) # Salida esperada: "IndexError: list index out of range"
Lista con elementos: Se elimina el último elemento de la lista con elementos.
# App/logic.py from DataStructures.List import array_list as al # Lista con elementos lista = al.new_list() lista = al.add_last(lista, 1) lista = al.add_last(lista, 2) print(al.remove_last(lista)) # Salida esperada: 2
- insert_element(my_list, element, pos)
Inserta un elemento en la posición dada.
Inserta el elemento en la posición
pos
. La lista puede estar vacia o tener elementos. Se incrementa el tamaño de la lista en 1.- Parameters:
my_list (array_list) – Lista en la cual se insertará el elemento.
element (any) – Elemento a insertar.
pos (int) – Posición en la cual se insertará el elemento.
- Returns:
Lista con el elemento insertado.
- Return type:
- Example:
# App/logic.py from DataStructures.List import array_list as al # Crea una lista vacía lista = al.new_list() # Agrega un elemento al final lista = al.add_last(lista, 1) lista = al.add_last(lista, 3) print(lista) # Salida esperada: {'size': 2, 'elements': [1, 3]} # Inserta el elemento 2 en la posición 1 print(al.insert_element(lista, 2, 1)) # Salida esperada: {'size': 3, 'elements': [1, 2, 3]}
- Test Scenarios:
Lista vacia: Se inserta un elemento en una lista vacía.
# App/logic.py from DataStructures.List import array_list as al # Crea una lista vacía lista = al.new_list() print(al.insert_element(lista, 1, 0)) # Salida esperada: {'size': 1, 'elements': [1]}
Lista con elementos: Se inserta un elemento en una lista con elementos.
# App/logic.py from DataStructures.List import array_list as al # Lista con elementos lista = al.new_list() lista = al.add_last(lista, 1) lista = al.add_last(lista, 3) print(al.insert_element(lista, 2, 1)) # Salida esperada: {'size': 3, 'elements': [1, 2, 3]}
- default_function(element_1, element_2)
Función de comparación por defecto a modo de ejemplo.
Esta función de comparación por defecto compara dos elementos y retorna
0
si son iguales,1
si elelement_1
es mayor queelement_2
y-1
sielement_1
es menor queelement_2
.Importante
Una
cmp_function
es una función de comparación que recibe dos elementos y retorna un valor entero. Use esta función como referencia para crear su propia función de comparación donde los criterios de comparación pueden ser definidos dependiendo del tipo de elementos y su contexto.- Parameters:
element_1 (any) – Primer elemento a comparar.
element_2 (any) – Segundo elemento a comparar.
- Returns:
0
si los elementos son iguales,1
si el primer elemento es mayor que el segundo y-1
en caso contrario.- Return type:
int
- Code example:
def default_function(elemen_1, element_2): if elemen_1 > element_2: return 1 elif elemen_1 < element_2: return -1 return 0
- is_present(my_list, element, cmp_function)
Verifica si un elemento está presente en la lista.
Para comparar los elementos, se utiliza la función de comparación
cmp_function
. Si el elemento está presente retorna su posición, en caso contrario retorna-1
.Importante
Una
cmp_function
es una función de comparación que recibe dos elementos y retorna un valor entero. Este valor entero debe ser0
si los elementos son iguales,1
si el primer elemento es mayor que el segundo y-1
en caso contrario. Use la función de comparación por defecto default_function como referencia para crear su propia función de comparación.- Parameters:
my_list (array_list) – Lista en la cual se buscará el elemento.
element (any) – Elemento a buscar.
cmp_function (function) – Función de comparación.
- Returns:
Posición del elemento si está presente,
-1
en caso contrario.- Return type:
int
- Example:
# App/logic.py from DataStructures.List import array_list as al # Función de comparación por defecto cmp_function = al.default_function # Crea una lista vacía lista = al.new_list() # Agrega un elemento al final lista = al.add_last(lista, 1) lista = al.add_last(lista, 2) print(al.is_present(lista, 2, cmp_function)) # Salida esperada: 1
- Test Scenarios:
Elemento presente: Se verifica si un elemento está presente en la lista.
# App/logic.py from DataStructures.List import array_list as al # Función de comparación por defecto cmp_function = al.default_function # Lista con elementos lista = al.new_list() lista = al.add_last(lista, 1) lista = al.add_last(lista, 2) print(al.is_present(lista, 2, cmp_function)) # Salida esperada: 1
Elemento no presente: Se verifica si un elemento no está presente en la lista.
# App/logic.py from DataStructures.List import array_list as al # Función de comparación por defecto cmp_function = al.default_function # Lista con elementos lista = al.new_list() lista = al.add_last(lista, 1) lista = al.add_last(lista, 2) print(al.is_present(lista, 3, cmp_function)) # Salida esperada: -1
- change_info(my_list, pos, new_info)
Cambia la información de un elemento en la posición dada.
Cambia la información del elemento en la posición
pos
por la informaciónnew_info
. Si la posición no es válida, lanza un errorIndexError: list index out of range
.- Parameters:
my_list (array_list) – Lista en la cual se cambiará la información del elemento.
pos (int) – Posición del elemento a cambiar.
new_info (any) – Nueva información del elemento.
- Returns:
Lista con la información del elemento cambiada.
- Return type:
- Example:
# App/logic.py from DataStructures.List import array_list as al # Crea una lista vacía lista = al.new_list() # Agrega un elemento al final lista = al.add_last(lista, 1) lista = al.add_last(lista, 2) print(lista) # Salida esperada: {'size': 2, 'elements': [1, 2]} # Cambia la información del elemento en la posición 1 print(al.change_info(lista, 1, 3)) # Salida esperada: {'size': 2, 'elements': [1, 3]}
- Test Scenarios:
Posición inválida: Se cambia la información de un elemento en una posición inválida.
# App/logic.py from DataStructures.List import array_list as al # Crea una lista vacía lista = al.new_list() print(al.change_info(lista, 0, 1)) # Salida esperada: "IndexError: list index out of range"
Posición válida: Se cambia la información de un elemento en una posición válida.
# App/logic.py from DataStructures.List import array_list as al # Lista con elementos lista = al.new_list() lista = al.add_last(lista, 1) lista = al.add_last(lista, 2) print(al.change_info(lista, 1, 3)) # Salida esperada: {'size': 2, 'elements': [1, 3]}
- exchange(my_list, pos_1, pos_2)
Intercambia la información de dos elementos en las posiciones dadas.
Intercambia la información de los elementos en las posiciones
pos_1
ypos_2
. Si alguna de las posiciones no es válida, lanza un errorIndexError: list index out of range
.- Parameters:
my_list (array_list) – Lista en la cual se intercambiará la información de los elementos.
pos_1 (int) – Posición del primer elemento a intercambiar.
pos_2 (int) – Posición del segundo elemento a intercambiar.
- Returns:
Lista con la información de los elementos intercambiada.
- Return type:
- Example:
# App/logic.py from DataStructures.List import array_list as al # Crea una lista vacía lista = al.new_list() # Agrega elementos a la lista lista = al.add_last(lista, 1) lista = al.add_last(lista, 2) lista = al.add_last(lista, 3) print(lista) # Salida esperada: {'size': 3, 'elements': [1, 2, 3]} # Intercambia la información de los elementos en las posiciones 0 y 2 print(al.exchange(lista, 0, 2)) # Salida esperada: {'size': 3, 'elements': [3, 2, 1]}
- Test Scenarios:
Posiciones inválidas: Se intercambia la información de dos elementos en posiciones inválidas.
# App/logic.py from DataStructures.List import array_list as al # Crea una lista vacía lista = al.new_list() print(al.exchange(lista, 0, 1)) # Salida esperada: "IndexError: list index out of range"
Posiciones válidas: Se intercambia la información de dos elementos en posiciones válidas.
# App/logic.py from DataStructures.List import array_list as al # Lista con elementos lista = al.new_list() lista = al.add_last(lista, 1) lista = al.add_last(lista, 2) lista = al.add_last(lista, 3) print(al.exchange(lista, 0, 2)) # Salida esperada: {'size': 3, 'elements': [3, 2, 1]}
- sub_list(my_list, pos_i, num_elements)
Retorna una sublista de la lista original.
Retorna una sublista de la lista original que inicia en la posición
pos_i
y contienenum_elements
elementos. Si la posición inicial no es válida, lanza un errorIndexError: list index out of range
.- Parameters:
my_list (array_list) – Lista de la cual se obtendrá la sublista.
pos_i (int) – Posición inicial de la sublista.
num_elements (int) – Número de elementos de la sublista.
- Returns:
Sublista de la lista original.
- Return type:
- Example:
# App/logic.py from DataStructures.List import array_list as al # Crea una lista vacía lista = al.new_list() # Agrega elementos a la lista lista = al.add_last(lista, 1) lista = al.add_last(lista, 2) lista = al.add_last(lista, 3) print(lista) # Salida esperada: {'size': 3, 'elements': [1, 2, 3]} # Obtiene la sublista de la lista original print(al.sub_list(lista, 1, 2)) # Salida esperada: {'size': 2, 'elements': [2, 3]}
- Test Scenarios:
Posición inicial inválida: Se obtiene una sublista de la lista original con una posición inicial inválida.
# App/logic.py from DataStructures.List import array_list as al # Crea una lista vacía lista = al.new_list() print(al.sub_list(lista, 0, 1)) # Salida esperada: "IndexError: list index out of range"
Posición inicial válida: Se obtiene una sublista de la lista original con una posición inicial válida.
# App/logic.py from DataStructures.List import array_list as al # Lista con elementos lista = al.new_list() lista = al.add_last(lista, 1) lista = al.add_last(lista, 2) lista = al.add_last(lista, 3) print(al.sub_list(lista, 1, 2)) # Salida esperada: {'size': 2, 'elements': [2, 3]}
single_linked_list.py
- new_list()
Crea una lista (de tipo single_linked_list) vacía.
La lista es creada con los siguientes atributos:
size: Tamaño actual de la lista, inicializado en 0.
first: Primer nodo de la lista, inicializado en
None
.last: Último nodo de la lista, inicializado en
None
.
- Returns:
Lista vacía recien creada.
- Return type:
- Example:
# App/logic.py from DataStructures.List import single_linked_list as sll # Crea una lista vacía lista = sll.new_list() print(lista) # Salida esperada: {'size': 0, 'first': None, 'last': None}
- Test Scenarios:
Crea una lista vacía: Se crea una lista vacía.
{ "size": 0, "first": None, "last": None }
- is_empty(my_list)
Verifica si la lista está vacía.
Retorna
True
si la lista está vacía, en caso contrario retornaFalse
.- Parameters:
my_list (single_linked_list) – Lista a verificar.
- Returns:
True
si la lista está vacía,False
en caso contrario.- Return type:
bool
- Example:
# App/logic.py from DataStructures.List import single_linked_list as sll # Crea una lista vacía lista = sll.new_list() print(sll.is_empty(lista)) # Salida esperada: True
- Test Scenarios:
Lista vacía: Se verifica si una lista está vacía.
# App/logic.py from DataStructures.List import single_linked_list as sll # Crea una lista vacía lista = sll.new_list() print(sll.is_empty(lista)) # Salida esperada: True
Lista con elementos: Se verifica si una lista con elementos está vacía.
# App/logic.py from DataStructures.List import single_linked_list as sll # Lista con elementos lista = sll.new_list() lista = sll.add_last(lista, 1) print(sll.is_empty(lista)) # Salida esperada: False
- size(my_list)
Retorna el tamaño de la lista.
- Parameters:
my_list (single_linked_list) – Lista de la cual se obtendrá el tamaño.
- Returns:
Tamaño de la lista.
- Return type:
int
- Example:
# App/logic.py from DataStructures.List import single_linked_list as sll # Crea una lista vacía lista = sll.new_list() print(sll.size(lista)) # Salida esperada: 0
- Test Scenarios:
Lista vacía: Se obtiene el tamaño de una lista vacía.
# App/logic.py from DataStructures.List import single_linked_list as sll # Crea una lista vacía lista = sll.new_list() print(sll.size(lista)) # Salida esperada: 0
Lista con elementos: Se obtiene el tamaño de una lista con elementos.
# App/logic.py from DataStructures.List import single_linked_list as sll # Lista con elementos lista = sll.new_list() lista = sll.add_last(lista, 1) print(sll.size(lista)) # Salida esperada: 1
- add_first(my_list, element)
Agrega un elemento al inicio de la lista.
Agrega un nuevo nodo al inicio de la lista y aumenta el tamaño de la lista en 1. En caso de que la lista esté vacía, el primer y último nodo de la lista serán el nuevo nodo.
- Parameters:
my_list (single_linked_list) – Lista a la cual se agregará el elemento.
element (any) – Elemento a agregar.
- Returns:
Lista con el elemento agregado al inicio.
- Return type:
- Example:
# App/logic.py from DataStructures.List import single_linked_list as sll # Crea una lista vacía lista = sll.new_list() lista = sll.add_first(lista, 1) print(lista) # Salida esperada: # {'size': 1, # 'first': {'info': 1, 'next': None}, # 'last': {'info': 1, 'next': None} # }
- Test Scenarios:
Agrega en una lista vacia: Se agrega un elemento al inicio de la lista vacía.
{ "size": 1, "first": { "info": 1, "next": None }, "last": { "info": 1, "next": None } }
Agrega en una lista con elementos: Se agrega un elemento al inicio de la lista con elementos.
# App/logic.py from DataStructures.List import single_linked_list as sll # Lista con elementos lista = sll.new_list() lista = sll.add_first(lista, 1) lista = sll.add_first(lista, 2) print(lista) # Salida esperada: # {'size': 2, # 'first': {'info': 2, 'next': {'info': 1, 'next': None}}, # 'last': {'info': 1, 'next': None} #}
- add_last(my_list, element)
Agrega un elemento al final de la lista.
Agrega un nuevo nodo al final de la lista y aumenta el tamaño de la lista en 1. En caso de que la lista esté vacía, el primer y último nodo de la lista serán el nuevo nodo.
- Parameters:
my_list (single_linked_list) – Lista a la cual se agregará el elemento.
element (any) – Elemento a agregar.
- Returns:
Lista con el elemento agregado al final.
- Return type:
- Example:
# App/logic.py from DataStructures.List import single_linked_list as sll # Crea una lista vacía lista = sll.new_list() lista = sll.add_last(lista, 1) print(lista) # Salida esperada: # {'size': 1, # 'first': {'info': 1, 'next': None}, # 'last': {'info': 1, 'next': None} # }
- Test Scenarios:
Agrega en una lista vacia: Se agrega un elemento al final de la lista vacía.
{ "size": 1, "first": { "info": 1, "next": None }, "last": { "info": 1, "next": None } }
Agrega en una lista con elementos: Se agrega un elemento al final de la lista con elementos.
# App/logic.py from DataStructures.List import single_linked_list as sll # Lista con elementos lista = sll.new_list() lista = sll.add_last(lista, 1) lista = sll.add_last(lista, 2) print(lista) # Salida esperada: # {'size': 2, # 'first': {'info': 1, 'next': {'info': 2, 'next': None}}, # 'last': {'info': 2, 'next': None} # }
- first_element(my_list)
Retorna el primer elemento de una lista no vacía.
Retorna el primer elemento de la lista. Si la lista está vacía, lanza un error
IndexError: list index out of range
. Esta función no elimina el elemento de la lista.Importante
Para lanzar un error si la lista está vacía, puede utilizar el siguiente código:
if is_empty(my_list): raise Exception('IndexError: list index out of range')
- Parameters:
my_list (single_linked_list) – Lista de la cual se obtendrá el primer elemento.
- Returns:
Primer elemento de la lista.
- Return type:
any
- Example:
# App/logic.py from DataStructures.List import single_linked_list as sll # Crea una lista vacía lista = sll.new_list() lista = sll.add_last(lista, {'name': 'Uno', 'number': 1}) lista = sll.add_last(lista, {'name': 'Dos', 'number': 2}) print(sll.first_element(lista)) # Salida esperada: {'name': 'Uno', 'number': 1}
- Test Scenarios:
Lista vacía: Se obtiene el primer elemento de una lista vacía.
# App/logic.py from DataStructures.List import single_linked_list as sll # Crea una lista vacía lista = sll.new_list() print(sll.first_element(lista)) # Salida esperada: "IndexError: list index out of range"
Lista con elementos: Se obtiene el primer elemento de una lista con elementos.
# App/logic.py from DataStructures.List import single_linked_list as sll # Lista con elementos lista = sll.new_list() lista = sll.add_last(lista, {'name': 'Uno', 'number': 1}) lista = sll.add_last(lista, {'name': 'Dos', 'number': 2}) print(sll.first_element(lista)) # Salida esperada: {'name': 'Uno', 'number': 1}
- last_element(my_list)
Retorna el último elemento de una lista no vacía.
Retorna el último elemento de la lista. Si la lista está vacía, lanza un error
IndexError: list index out of range
. Esta función no elimina el elemento de la lista.Importante
Para lanzar un error si la lista está vacía, puede utilizar el siguiente código:
if is_empty(my_list): raise Exception('IndexError: list index out of range')
- Parameters:
my_list (single_linked_list) – Lista de la cual se obtendrá el último elemento.
- Returns:
Último elemento de la lista.
- Return type:
any
- Example:
# App/logic.py from DataStructures.List import single_linked_list as sll # Crea una lista vacía lista = sll.new_list() lista = sll.add_last(lista, {'name': 'Uno', 'number': 1}) lista = sll.add_last(lista, {'name': 'Dos', 'number': 2}) print(sll.last_element(lista)) # Salida esperada: {'name': 'Dos', 'number': 2}
- Test Scenarios:
Lista vacía: Se obtiene el último elemento de una lista vacía.
# App/logic.py from DataStructures.List import single_linked_list as sll # Crea una lista vacía lista = sll.new_list() print(sll.last_element(lista)) # Salida esperada: "IndexError: list index out of range"
Lista con elementos: Se obtiene el último elemento de una lista con elementos.
# App/logic.py from DataStructures.List import single_linked_list as sll # Lista con elementos lista = sll.new_list() lista = sll.add_last(lista, {'name': 'Uno', 'number': 1}) lista = sll.add_last(lista, {'name': 'Dos', 'number': 2}) print(sll.last_element(lista)) # Salida esperada: {'name': 'Dos', 'number': 2}
- get_element(my_list, pos)
Retorna el elemento en la posición dada.
Retorna el elemento en la posición
pos
, la cual debe ser igual o mayor a cero y menor al tamaño de la lista.0 <= pos < size(my_list)
. Si la posición no es válida, lanza un errorIndexError: list index out of range
. Esta función no elimina el elemento de la lista.Importante
Para lanzar un error si la posición no es válida, puede utilizar el siguiente código:
if pos < 0 or pos >= size(my_list): raise Exception('IndexError: list index out of range')
- Parameters:
my_list (single_linked_list) – Lista de la cual se obtendrá el elemento.
pos (int) – Posición del elemento a obtener.
- Returns:
Elemento en la posición dada.
- Return type:
any
- Example:
# App/logic.py from DataStructures.List import single_linked_list as sll # Crea una lista vacía lista = sll.new_list() lista = sll.add_last(lista, {'name': 'Uno', 'number': 1}) lista = sll.add_last(lista, {'name': 'Dos', 'number': 2}) lista = sll.add_last(lista, {'name': 'Tres', 'number': 3}) print(sll.get_element(lista, 1)) # Salida esperada: {'name': 'Dos', 'number': 2}
- Test Scenarios:
Posición inválida: Se obtiene un elemento en una posición inválida.
# App/logic.py from DataStructures.List import single_linked_list as sll # Crea una lista vacía lista = sll.new_list() print(sll.get_element(lista, 3)) # Salida esperada: "IndexError: list index out of range"
Posición válida: Se obtiene un elemento en una posición válida.
# App/logic.py from DataStructures.List import single_linked_list as sll # Lista con elementos lista = sll.new_list() lista = sll.add_last(lista, {'name': 'Uno', 'number': 1}) lista = sll.add_last(lista, {'name': 'Dos', 'number': 2}) lista = sll.add_last(lista, {'name': 'Tres', 'number': 3}) print(sll.get_element(lista, 1)) # Salida esperada: {'name': 'Dos', 'number': 2}
- delete_element(my_list, pos)
Elimina un elemento en la posición dada.
Elimina el elemento en la posición
pos
, la cual debe ser igual o mayor a cero y menor al tamaño de la lista.0 <= pos < size(my_list)
Si la posición no es válida, lanza un errorIndexError: list index out of range
.Importante
Para lanzar un error si la posición no es válida, puede utilizar el siguiente código:
if pos < 0 or pos >= size(my_list): raise Exception('IndexError: list index out of range')
- Parameters:
my_list (single_linked_list) – Lista de la cual se eliminará el elemento.
pos (int) – Posición del elemento a eliminar.
- Returns:
Lista con el elemento eliminado.
- Return type:
- Example:
# App/logic.py from DataStructures.List import single_linked_list as sll # Crea una lista vacía lista = sll.new_list() lista = sll.add_last(lista, {'name': 'Uno', 'number': 1}) lista = sll.add_last(lista, {'name': 'Dos', 'number': 2}) lista = sll.add_last(lista, {'name': 'Tres', 'number': 3}) print(sll.delete_element(lista, 1)) # Salida esperada: # {'size': 2, # 'first': {'info': {'name': 'Uno', 'number': 1}, 'next': {'info': {'name': 'Tres', 'number': 3}, 'next': None}}, # 'last': {'info': {'name': 'Tres', 'number': 3}, 'next': None} # }
- Test Scenarios:
Posición inválida: Se elimina un elemento en una posición inválida.
# App/logic.py from DataStructures.List import single_linked_list as sll # Crea una lista vacía lista = sll.new_list() print(sll.delete_element(lista, 3)) # Salida esperada: "IndexError: list index out of range"
Posición válida: Se elimina un elemento en una posición válida.
# App/logic.py from DataStructures.List import single_linked_list as sll # Lista con elementos lista = sll.new_list() lista = sll.add_last(lista, {'name': 'Uno', 'number': 1}) lista = sll.add_last(lista, {'name': 'Dos', 'number': 2}) lista = sll.add_last(lista, {'name': 'Tres', 'number': 3}) print(sll.delete_element(lista, 1)) # Salida esperada: # {'size': 2, # 'first': {'info': {'name': 'Uno', 'number': 1}, 'next': {'info': {'name': 'Tres', 'number': 3}, 'next': None}}, # 'last': {'info': {'name': 'Tres', 'number': 3}, 'next': None} # }
- remove_first(my_list)
Elimina el primer elemento de la lista.
Elimina el primer elemento de la lista y disminuye el tamaño de la lista en 1. Si la lista está vacía, lanza un error
IndexError: list index out of range
.- Parameters:
my_list (single_linked_list) – Lista de la cual se eliminará el primer elemento.
- Returns:
Element eliminado de la lista.
- Return type:
any
- Example:
# App/logic.py from DataStructures.List import single_linked_list as sll # Crea una lista vacía lista = sll.new_list() lista = sll.add_last(lista, {'name': 'Uno', 'number': 1}) lista = sll.add_last(lista, {'name': 'Dos', 'number': 2}) print(sll.remove_first(lista)) # Salida esperada: # {'name': 'Uno', 'number': 1}
- Test Scenarios:
Lista vacía: Se elimina el primer elemento de una lista vacía.
# App/logic.py from DataStructures.List import single_linked_list as sll # Crea una lista vacía lista = sll.new_list() print(sll.remove_first(lista)) # Salida esperada: "IndexError: list index out of range"
Lista con elementos: Se elimina el primer elemento de una lista con elementos.
# App/logic.py from DataStructures.List import single_linked_list as sll # Lista con elementos lista = sll.new_list() lista = sll.add_last(lista, {'name': 'Uno', 'number': 1}) lista = sll.add_last(lista, {'name': 'Dos', 'number': 2}) print(sll.remove_first(lista)) # Salida esperada: # {'name': 'Uno', 'number': 1}
- remove_last(my_list)
Elimina el último elemento de la lista.
Elimina el último elemento de la lista y disminuye el tamaño de la lista en 1. Si la lista está vacía, lanza un error
IndexError: list index out of range
.- Parameters:
my_list (single_linked_list) – Lista de la cual se eliminará el último elemento.
- Returns:
Element eliminado de la lista.
- Return type:
any
- Example:
# App/logic.py from DataStructures.List import single_linked_list as sll # Crea una lista vacía lista = sll.new_list() lista = sll.add_last(lista, {'name': 'Uno', 'number': 1}) lista = sll.add_last(lista, {'name': 'Dos', 'number': 2}) print(sll.remove_last(lista)) # Salida esperada: # {'name': 'Dos', 'number': 2}
- Test Scenarios:
Lista vacía: Se elimina el último elemento de una lista vacía.
# App/logic.py from DataStructures.List import single_linked_list as sll # Crea una lista vacía lista = sll.new_list() print(sll.remove_last(lista)) # Salida esperada: "IndexError: list index out of range"
Lista con elementos: Se elimina el último elemento de una lista con elementos.
# App/logic.py from DataStructures.List import single_linked_list as sll # Lista con elementos lista = sll.new_list() lista = sll.add_last(lista, {'name': 'Uno', 'number': 1}) lista = sll.add_last(lista, {'name': 'Dos', 'number': 2}) print(sll.remove_last(lista)) # Salida esperada: # {'name': 'Dos', 'number': 2}
- insert_element(my_list, element, pos)
Inserta un elemento en la posición dada.
Inserta el elemento en la posición
pos
, la cual debe ser igual o mayor a cero y menor o igual al tamaño de la lista.0 <= pos <= size(my_list)
. Se incrementa el tamaño de la lista en 1.Importante
Para lanzar un error si la posición no es válida, puede utilizar el siguiente código:
if pos < 0 or pos > size(my_list): raise Exception('IndexError: list index out of range')
- Parameters:
my_list (single_linked_list) – Lista en la cual se insertará el elemento.
element (any) – Elemento a insertar.
pos (int) – Posición en la cual se insertará el elemento.
- Returns:
Lista con el elemento insertado.
- Return type:
- Example:
# App/logic.py from DataStructures.List import single_linked_list as sll # Crea una lista vacía lista = sll.new_list() lista = sll.add_last(lista, {'name': 'Uno', 'number': 1}) lista = sll.add_last(lista, {'name': 'Dos', 'number': 2}) lista = sll.insert_element(lista, {'name': 'Tres', 'number': 3}, 1) print(lista) # Salida esperada: # {'size': 3, # 'first': {'info': {'name': 'Uno', 'number': 1}, 'next': {'info': {'name': 'Tres', 'number': 3}, 'next': {'info': {'name': 'Dos', 'number': 2}, 'next': None}}}, # 'last': {'info': {'name': 'Dos', 'number': 2}, 'next': None} # }
- Test Scenarios:
Posición inválida: Se inserta un elemento en una posición inválida.
# App/logic.py from DataStructures.List import single_linked_list as sll # Crea una lista vacía lista = sll.new_list() print(sll.insert_element(lista, {'name': 'Uno', 'number': 1}, 3)) # Salida esperada: "IndexError: list index out of range"
Posición válida: Se inserta un elemento en una posición válida.
# App/logic.py from DataStructures.List import single_linked_list as sll # Lista con elementos lista = sll.new_list() lista = sll.add_last(lista, {'name': 'Uno', 'number': 1}) lista = sll.add_last(lista, {'name': 'Tres', 'number': 3}) lista = sll.insert_element(lista, {'name': 'Dos', 'number': 2}, 1) print(lista) # Salida esperada: # {'size': 3, # 'first': {'info': {'name': 'Uno', 'number': 1}, # 'next': {'info': {'name': 'Dos', 'number': 2}, # 'next': {'info': {'name': 'Tres', 'number': 3}, # 'next': None # } # } # }, # 'last': {'info': {'name': 'Tres', 'number': 3}, 'next': None} # }
- default_function(element_1, element_2)
Función de comparación por defecto a modo de ejemplo.
Esta función de comparación por defecto compara dos elementos y retorna
0
si son iguales,1
si elelement_1
es mayor queelement_2
y-1
sielement_1
es menor queelement_2
.Importante
Una
cmp_function
es una función de comparación que recibe dos elementos y retorna un valor entero. Use esta función como referencia para crear su propia función de comparación donde los criterios de comparación pueden ser definidos dependiendo del tipo de elementos y su contexto.- Parameters:
element_1 (any) – Primer elemento a comparar.
element_2 (any) – Segundo elemento a comparar.
- Returns:
0
si los elementos son iguales,1
si el primer elemento es mayor que el segundo y-1
en caso contrario.- Return type:
int
- Code example:
def default_function(elemen_1, element_2): if elemen_1 > element_2: return 1 elif elemen_1 < element_2: return -1 return 0
- is_present(my_list, element, cmp_function)
Verifica si un elemento está presente en la lista.
Para comparar los elementos, se utiliza la función de comparación
cmp_function
. Si el elemento está presente retorna su posición, en caso contrario retorna-1
.Importante
Una
cmp_function
es una función de comparación que recibe dos elementos y retorna un valor entero. Este valor entero debe ser0
si los elementos son iguales,1
si el primer elemento es mayor que el segundo y-1
en caso contrario. Use la función de comparación por defecto default_function como referencia para crear su propia función de comparación.- Parameters:
my_list (single_linked_list) – Lista en la cual se buscará el elemento.
element (any) – Elemento a buscar.
cmp_function (function) – Función de comparación.
- Returns:
Posición del elemento si está presente,
-1
en caso contrario.- Return type:
int
- Example:
# App/logic.py from DataStructures.List import single_linked_list as sll # Función de comparación por defecto cmp_function = sll.default_function # Crea una lista vacía lista = sll.new_list() lista = sll.add_last(lista, 1) lista = sll.add_last(lista, 2) print(sll.is_present(lista, 2, cmp_function)) # Salida esperada: 1
- Test Scenarios:
Elemento presente: Se verifica si un elemento está presente en la lista.
# App/logic.py from DataStructures.List import single_linked_list as sll # Función de comparación por defecto cmp_function = sll.default_function # Lista con elementos lista = sll.new_list() lista = sll.add_last(lista, 1) lista = sll.add_last(lista, 2) print(sll.is_present(lista, 2, cmp_function)) # Salida esperada: 1
Elemento no presente: Se verifica si un elemento no está presente en la lista.
# App/logic.py from DataStructures.List import single_linked_list as sll # Función de comparación por defecto cmp_function = sll.default_function # Lista con elementos lista = sll.new_list() lista = sll.add_last(lista, 1) lista = sll.add_last(lista, 2) print(sll.is_present(lista, 3, cmp_function)) # Salida esperada: -1
- change_info(my_list, pos, new_info)
Cambia la información de un elemento en la posición dada.
Cambia la información del elemento en la posición
pos
por la informaciónnew_info
. Si la posición no es válida, lanza un errorIndexError: list index out of range
.- Parameters:
my_list (single_linked_list) – Lista en la cual se cambiará la información del elemento.
pos (int) – Posición del elemento a cambiar.
new_info (any) – Nueva información del elemento.
- Returns:
Lista con la información del elemento cambiada.
- Return type:
- Example:
# App/logic.py from DataStructures.List import single_linked_list as sll # Crea una lista vacía lista = sll.new_list() lista = sll.add_last(lista, {'name': 'Uno', 'number': 1}) lista = sll.add_last(lista, {'name': 'Dos', 'number': 2}) print(sll.change_info(lista, 1, {'name': 'Tres', 'number': 3})) # Salida esperada: # {'size': 2, # 'first': {'info': {'name': 'Uno', 'number': 1}, 'next': {'info': {'name': 'Tres', 'number': 3}, 'next': None}}, # 'last': {'info': {'name': 'Tres', 'number': 3}, 'next': None} # }
- Test Scenarios:
Posición inválida: Se cambia la información de un elemento en una posición inválida.
# App/logic.py from DataStructures.List import single_linked_list as sll # Crea una lista vacía lista = sll.new_list() print(sll.change_info(lista, 3, {'name': 'Tres', 'number': 3})) # Salida esperada: "IndexError: list index out of range"
Posición válida: Se cambia la información de un elemento en una posición válida.
# App/logic.py from DataStructures.List import single_linked_list as sll # Lista con elementos lista = sll.new_list() lista = sll.add_last(lista, {'name': 'Uno', 'number': 1}) lista = sll.add_last(lista, {'name': 'Dos', 'number': 2}) print(sll.change_info(lista, 1, {'name': 'Tres', 'number': 3})) # Salida esperada: # {'size': 2, # 'first': {'info': {'name': 'Uno', 'number': 1}, # 'next': {'info': {'name': 'Tres', 'number': 3}, # 'next': None # } # }, # 'last': {'info': {'name': 'Tres', 'number': 3}, 'next': None} # }
- exchange(my_list, pos_1, pos_2)
Intercambia la posición de dos elementos.
Intercambia la posición de los elementos en las posiciones
pos_1
ypos_2
. Si alguna de las posiciones no es válida, lanza un errorIndexError: list index out of range
.- Parameters:
my_list (single_linked_list) – Lista en la cual se intercambiarán los elementos.
pos_1 (int) – Posición del primer elemento a intercambiar.
pos_2 (int) – Posición del segundo elemento a intercambiar.
- Returns:
Lista con los elementos intercambiados.
- Return type:
- Example:
# App/logic.py from DataStructures.List import single_linked_list as sll # Crea una lista vacía lista = sll.new_list() lista = sll.add_last(lista, {'name': 'Uno', 'number': 1}) lista = sll.add_last(lista, {'name': 'Dos', 'number': 2}) print(sll.exchange(lista, 0, 1)) # Salida esperada: # {'size': 2, # 'first': {'info': {'name': 'Dos', 'number': 2}, 'next': {'info': {'name': 'Uno', 'number': 1}, 'next': None}}, # 'last': {'info': {'name': 'Uno', 'number': 1}, 'next': None} # }
- Test Scenarios:
Posiciones inválidas: Se intercambia la posición de dos elementos en posiciones inválidas.
# App/logic.py from DataStructures.List import single_linked_list as sll # Crea una lista vacía lista = sll.new_list() print(sll.exchange(lista, 3, 4)) # Salida esperada: "IndexError: list index out of range"
Posiciones válidas: Se intercambia la posición de dos elementos en posiciones válidas.
# App/logic.py from DataStructures.List import single_linked_list as sll # Lista con elementos lista = sll.new_list() lista = sll.add_last(lista, {'name': 'Uno', 'number': 1}) lista = sll.add_last(lista, {'name': 'Dos', 'number': 2}) print(sll.exchange(lista, 0, 1)) # Salida esperada: # {'size': 2, # 'first': {'info': {'name': 'Dos', 'number': 2}, # 'next': {'info': {'name': 'Uno', 'number': 1}, # 'next': None # } # }, # 'last': {'info': {'name': 'Uno', 'number': 1}, 'next': None} # }
- sub_list(my_list, pos, num_elements)
Retorna una sublista de la lista original.
Retorna una sublista de la lista original que contiene
num_elements
elementos a partir de la posiciónpos
. Si la posición no es válida, lanza un errorIndexError: list index out of range
.- Parameters:
my_list (single_linked_list) – Lista de la cual se obtendrá la sublista.
pos (int) – Posición inicial de la sublista.
num_elements (int) – Número de elementos de la sublista.
- Returns:
Sublista de la lista original.
- Return type:
- Example:
# App/logic.py from DataStructures.List import single_linked_list as sll # Crea una lista vacía lista = sll.new_list() lista = sll.add_last(lista, {'name': 'Uno', 'number': 1}) lista = sll.add_last(lista, {'name': 'Dos', 'number': 2}) lista = sll.add_last(lista, {'name': 'Tres', 'number': 3}) print(sll.sub_list(lista, 1, 2)) # Salida esperada: # {'size': 2, # 'first': {'info': {'name': 'Dos', 'number': 2}, 'next': {'info': {'name': 'Tres', 'number': 3}, 'next': None}}, # 'last': {'info': {'name': 'Tres', 'number': 3}, 'next': None} # }
- Test Scenarios:
Posición inválida: Se obtiene una sublista de una lista en una posición inválida.
# App/logic.py from DataStructures.List import single_linked_list as sll # Crea una lista vacía lista = sll.new_list() print(sll.sub_list(lista, 3, 2)) # Salida esperada: "IndexError: list index out of range"
Posición válida: Se obtiene una sublista de una lista en una posición válida.
# App/logic.py from DataStructures.List import single_linked_list as sll # Lista con elementos lista = sll.new_list() lista = sll.add_last(lista, {'name': 'Uno', 'number': 1}) lista = sll.add_last(lista, {'name': 'Dos', 'number': 2}) lista = sll.add_last(lista, {'name': 'Tres', 'number': 3}) print(sll.sub_list(lista, 1, 2)) # Salida esperada: # {'size': 2, # 'first': {'info': {'name': 'Dos', 'number': 2}, # 'next': {'info': {'name': 'Tres', 'number': 3}, # 'next': None # } # }, # 'last': {'info': {'name': 'Tres', 'number': 3}, 'next': None} # }
Ordenamientos
Importante
Las funciones de ordenamientos presentadas a continuación deberán ser implementadas tanto en la implementación de arreglos como en la de listas enlazadas simples.
Por motivos prácticos, los ejemplos y pruebas de estas funciones se realizarán en la implementación de array_list
- default_sort_criteria(element_1, element_2)
Función de comparación por defecto para ordenar elementos.
Compara dos elementos y retorna
True
si el primer elemento es menor que el segundo yFalse
en caso contrario.Importante
Una
sort_criteria
es una función de comparación que recibe dos elementos y retorna un valor booleano. Use esta función como referencia para crear su propia función de comparación donde dependiendo de los condicionales se de un orden ascendente o descendente. Por ejemplo, si se desea ordenar de forma ascendente, se debe retornarTrue
si el primer elemento es menor que el segundo yFalse
en caso contrario, como se ve en los ejemplos presentados a continuación.- Parameters:
element_1 (any) – Primer elemento a comparar.
element_2 (any) – Segundo elemento a comparar.
- Returns:
True
si el primer elemento es menor que el segundo,False
en caso contrario.- Return type:
bool
- Code example:
Comparación de números:
def default_sort_criteria(element_1, element_2): is_sorted = False if element_1 < element_2: is_sorted = True return is_sorted
Comparación de diccionarios:
def default_sort_criteria(element_1, element_2): is_sorted = False if float(element_1["average_rating"]) < float(element2["average_rating"]): is_sorted = True return is_sorted
- selection_sort(my_list, sort_crit)
Ordena una lista utilizando el algoritmo de ordenamiento Selecion Sort.
Se recorre la lista y se selecciona el elemento más pequeño y se intercambia con el primer elemento. Luego se selecciona el segundo elemento más pequeño y se intercambia con el segundo elemento, y así sucesivamente.
Ayuda
Una
sort_crit
es una función de comparación que recibe dos elementos y retorna un valor booleano. Use la función de criterio de ordenamiento por defecto default_sort_criteria como referencia para crear su propio criterio de ordenamiento.Nota
Dependiendo de la función de comparación, se ordena la lista de forma ascendente o descendente.
- Parameters:
my_list (array_list o single_linked_list) – Lista a ordenar.
sort_crit (function) – Función de comparación.
- Returns:
Lista ordenada.
- Return type:
- Example:
# App/logic.py from DataStructures.List import array_list as al # Función de comparación por defecto sort_crit = al.default_sort_criteria # Crea una lista vacía lista = al.new_list() lista = al.add_last(lista, 3) lista = al.add_last(lista, 1) lista = al.add_last(lista, 2) print(al.selection_sort(lista, sort_crit)) # Salida esperada: {'size': 3, 'elements': [1, 2, 3]}
- Test Scenarios:
Lista desordenada: Se ordena una lista desordenada.
# App/logic.py from DataStructures.List import array_list as al # Función de comparación por defecto sort_crit = al.default_sort_criteria # Lista desordenada lista = al.new_list() lista = al.add_last(lista, 3) lista = al.add_last(lista, 1) lista = al.add_last(lista, 2) print(al.selection_sort(lista, sort_crit)) # Salida esperada: {'size': 3, 'elements': [1, 2, 3]}
Lista ordenada: Se ordena una lista ordenada.
# App/logic.py from DataStructures.List import array_list as al # Función de comparación por defecto sort_crit = al.default_sort_criteria # Lista ordenada lista = al.new_list() lista = al.add_last(lista, 1) lista = al.add_last(lista, 2) lista = al.add_last(lista, 3) print(al.selection_sort(lista, sort_crit)) # Salida esperada: {'size': 3, 'elements': [1, 2, 3]}
Lista invertida: Se ordena una lista invertida.
# App/logic.py from DataStructures.List import array_list as al # Función de comparación por defecto sort_crit = al.default_sort_criteria # Lista invertida lista = al.new_list() lista = al.add_last(lista, 3) lista = al.add_last(lista, 2) lista = al.add_last(lista, 1) print(al.selection_sort(lista, sort_crit)) # Salida esperada: {'size': 3, 'elements': [1, 2, 3]}
- insertion_sort(my_list, sort_crit)
Ordena una lista utilizando el algoritmo de ordenamiento Insertion Sort.
Se recorre la lista y se inserta cada elemento en su posición correcta.Se repite este proceso hasta que todos los elementos estén ordenados.
Importante
Una
sort_crit
es una función de comparación que recibe dos elementos y retorna un valor booleano. Use la función de criterio de ordenamiento por defecto default_sort_criteria como referencia para crear su propio criterio de ordenamiento.Nota
Dependiendo de la función de comparación, se ordena la lista de forma ascendente o descendente.
- Parameters:
my_list (array_list o single_linked_list) – Lista a ordenar.
sort_crit (function) – Función de comparación.
- Returns:
Lista ordenada.
- Return type:
- Example:
# App/logic.py from DataStructures.List import array_list as al # Función de comparación por defecto sort_crit = al.default_sort_criteria # Crea una lista vacía lista = al.new_list() lista = al.add_last(lista, 3) lista = al.add_last(lista, 1) lista = al.add_last(lista, 2) print(al.insertion_sort(lista, sort_crit)) # Salida esperada: {'size': 3, 'elements': [1, 2, 3]}
- Test Scenarios:
Lista desordenada: Se ordena una lista desordenada.
# App/logic.py from DataStructures.List import array_list as al # Función de comparación por defecto sort_crit = al.default_sort_criteria # Lista desordenada lista = al.new_list() lista = al.add_last(lista, 3) lista = al.add_last(lista, 1) lista = al.add_last(lista, 2) print(al.insertion_sort(lista, sort_crit)) # Salida esperada: {'size': 3, 'elements': [1, 2, 3]}
Lista ordenada: Se ordena una lista ordenada.
# App/logic.py from DataStructures.List import array_list as al # Función de comparación por defecto sort_crit = al.default_sort_criteria # Lista ordenada lista = al.new_list() lista = al.add_last(lista, 1) lista = al.add_last(lista, 2) lista = al.add_last(lista, 3) print(al.insertion_sort(lista, sort_crit)) # Salida esperada: {'size': 3, 'elements': [1, 2, 3]}
Lista invertida: Se ordena una lista invertida.
# App/logic.py from DataStructures.List import array_list as al # Función de comparación por defecto sort_crit = al.default_sort_criteria # Lista invertida lista = al.new_list() lista = al.add_last(lista, 3) lista = al.add_last(lista, 2) lista = al.add_last(lista, 1) print(al.insertion_sort(lista, sort_crit)) # Salida esperada: {'size': 3, 'elements': [1, 2, 3]}
- shell_sort(my_list, sort_crit)
Ordena una lista utilizando el algoritmo de ordenamiento Shell Sort.
Se recorre la lista y se ordena los elementos con un gap determinado. Se repite el proceso con un gap menor hasta que la lista esté ordenada.
Si la lista es vacía o tiene un solo elemento, se retorna la lista original.
Importante
Una
sort_crit
es una función de comparación que recibe dos elementos y retorna un valor booleano. Use la función de criterio de ordenamiento por defecto default_sort_criteria como referencia para crear su propio criterio de ordenamiento.Nota
Dependiendo de la función de comparación, se ordena la lista de forma ascendente o descendente.
- Parameters:
my_list (array_list o single_linked_list) – Lista a ordenar.
sort_crit (function) – Función de comparación.
- Returns:
Lista ordenada.
- Return type:
- Example:
# App/logic.py from DataStructures.List import array_list as al # Función de comparación por defecto sort_crit = al.default_sort_criteria # Crea una lista vacía lista = al.new_list() lista = al.add_last(lista, 3) lista = al.add_last(lista, 1) lista = al.add_last(lista, 2) print(al.shell_sort(lista, sort_crit)) # Salida esperada: {'size': 3, 'elements': [1, 2, 3]}
- Test Scenarios:
Lista desordenada: Se ordena una lista desordenada.
# App/logic.py from DataStructures.List import array_list as al # Función de comparación por defecto sort_crit = al.default_sort_criteria # Lista desordenada lista = al.new_list() lista = al.add_last(lista, 3) lista = al.add_last(lista, 1) lista = al.add_last(lista, 2) print(al.shell_sort(lista, sort_crit)) # Salida esperada: {'size': 3, 'elements': [1, 2, 3]}
Lista ordenada: Se ordena una lista ordenada.
# App/logic.py from DataStructures.List import array_list as al # Función de comparación por defecto sort_crit = al.default_sort_criteria # Lista ordenada lista = al.new_list() lista = al.add_last(lista, 1) lista = al.add_last(lista, 2) lista = al.add_last(lista, 3) print(al.shell_sort(lista, sort_crit)) # Salida esperada: {'size': 3, 'elements': [1, 2, 3]}
Lista invertida: Se ordena una lista invertida.
# App/logic.py from DataStructures.List import array_list as al # Función de comparación por defecto sort_crit = al.default_sort_criteria # Lista invertida lista = al.new_list() lista = al.add_last(lista, 3) lista = al.add_last(lista, 2) lista = al.add_last(lista, 1) print(al.shell_sort(lista, sort_crit)) # Salida esperada: {'size': 3, 'elements': [1, 2, 3]}
- merge_sort(my_list, sort_crit)
Ordena una lista utilizando el algoritmo recursivo de ordenamiento Merge Sort.
Se divide la lista en dos partes iguales* y se ordenan de forma recursiva. Luego se mezclan las dos partes ordenadas.
Si la lista es vacía o tiene un solo elemento, se retorna la lista original.
Importante
Una
sort_crit
es una función de comparación que recibe dos elementos y retorna un valor booleano. Use la función de criterio de ordenamiento por defecto default_sort_criteria como referencia para crear su propio criterio de ordenamiento.Nota
Dependiendo de la función de comparación, se ordena la lista de forma ascendente o descendente.
- Parameters:
my_list (array_list o single_linked_list) – Lista a ordenar.
sort_crit (function) – Función de comparación.
- Returns:
Lista ordenada.
- Return type:
- Example:
# App/logic.py from DataStructures.List import array_list as al # Función de comparación por defecto sort_crit = al.default_sort_criteria # Crea una lista vacía lista = al.new_list() lista = al.add_last(lista, 3) lista = al.add_last(lista, 1) lista = al.add_last(lista, 2) print(al.merge_sort(lista, sort_crit)) # Salida esperada: {'size': 3, 'elements': [1, 2, 3]}
- Test Scenarios:
Lista desordenada: Se ordena una lista desordenada.
# App/logic.py from DataStructures.List import array_list as al # Función de comparación por defecto sort_crit = al.default_sort_criteria # Lista desordenada lista = al.new_list() lista = al.add_last(lista, 3) lista = al.add_last(lista, 1) lista = al.add_last(lista, 2) print(al.merge_sort(lista, sort_crit)) # Salida esperada: {'size': 3, 'elements': [1, 2, 3]}
Lista ordenada: Se ordena una lista ordenada.
# App/logic.py from DataStructures.List import array_list as al # Función de comparación por defecto sort_crit = al.default_sort_criteria # Lista ordenada lista = al.new_list() lista = al.add_last(lista, 1) lista = al.add_last(lista, 2) lista = al.add_last(lista, 3) print(al.merge_sort(lista, sort_crit)) # Salida esperada: {'size': 3, 'elements': [1, 2, 3]}
Lista invertida: Se ordena una lista invertida.
# App/logic.py from DataStructures.List import array_list as al # Función de comparación por defecto sort_crit = al.default_sort_criteria # Lista invertida lista = al.new_list() lista = al.add_last(lista, 3) lista = al.add_last(lista, 2) lista = al.add_last(lista, 1) print(al.merge_sort(lista, sort_crit)) # Salida esperada: {'size': 3, 'elements': [1, 2, 3]}
- quick_sort(my_list, sort_crit)
Ordena una lista utilizando el algoritmo recursivo de ordenamiento Quick Sort.
Se selecciona un elemento como pivote y se colocan los elementos menores a la izquierda y los mayores a la derecha de este elemento pivote.
Si la lista es vacía o tiene un solo elemento, se retorna la lista original.
Importante
Una
sort_crit
es una función de comparación que recibe dos elementos y retorna un valor booleano. Use la función de criterio de ordenamiento por defecto default_sort_criteria como referencia para crear su propio criterio de ordenamiento.Nota
Dependiendo de la función de comparación, se ordena la lista de forma ascendente o descendente.
- Parameters:
my_list (array_list o single_linked_list) – Lista a ordenar.
sort_crit (function) – Función de comparación.
- Returns:
Lista ordenada.
- Return type: