#4 Buscar en una lista - Python
hace 3 años · Actualizado hace 12 meses
En este mini-tutorial voy a explicarte como buscar datos en una lista usando Python. Voy a enseñarte como hacerlo con las funciones predefinidas que se incluyen en las librerías de Python.
Para buscar un valor en una lista en Python, puedes utilizar la función index(). Simplemente proporciona el valor que deseas buscar como argumento y la función te devolverá la posición en la que se encuentra dentro de la lista. Sigue leyendo para ver los ejemplos!
Buscar datos en una lista con Python: Funciones predefinidas
Teniendo en cuenta que tenemos la lista:
l = ['limón', 'manzana', 'naranja', 'plátano', 'cereza', 'fresa', 'tomate']
Para saber la posición del elemento 'cereza' debemos hacer lo siguiente:
l.index('cereza')
Esta función nos devolverá la posición (empezando en 0) en la que se encuentra la primera aparición del elemento 'cereza', en este caso 4:
Si queremos saber cuál es el elemento de la posición 3, debemos utilizar la siguiente sintaxis:
l[3]
Lo que nos devolverá el valor que tenemos almacenado en la posición 3:
▶︎ Si estás muy perdido y no sabes la diferencia entre la posición de una lista y el contenido, ve directamente a esta sección 🙂
Algoritmos de búsqueda de datos
Si quieres saber más de los algoritmos de búsquedas de datos, ya sea porque quieres conocer las bases teóricas o porque quieres implementarlos, aquí tienes toda la información necesaria!
Algoritmo de búsqueda de datos en listas no ordenadas
Si queremos realizar la búsqueda de un elemento en una lista, pero los datos no están ordenados (o no tenemos información sobre si están ordenados) no nos queda otra opción que ir elemento a elemento comprobando si el valor de cada posición de la lista corresponde con el elemento que estamos buscando.
Esta solución es mucho más ineficiente, pero para conjuntos de datos más pequeños es más que suficiente. La lógica para implementar este tipo de solución es la siguiente:
elemento_de_interes <- dato PARA cada elemento de la lista: SI elemento ES IGUAL A elemento_de_interes: devolver posicion_actual devolver -1
Este pseudocódigo indica la lógica de recorrer el array o lista y comprobar si cada elemento coincide con el valor que estamos buscando. En Python, tendríamos las siguientes instrucciones de código:
elemento_de_interes = 'cereza' def buscar(elemento_de_interes, l): for index, element in enumerate(l): if element == elemento_de_interes: return index return -1
Concretamente, en este caso la función enumerate devuelve el índice o posición y el elemento.
Algoritmo de búsqueda de datos en listas ordenadas
Si los datos de la lista están ordenados, podemos optimizar la búsqueda. Para entender a lo que me refiero, tienes que saber que la operación IF es muy costosa, sobre todo si la repetimos muchas veces. Hay ocasiones en las que no nos queda más remedio que utilizarla en largos bucles de iteraciones.
Pero en el caso de una lista ordenada tenemos la opción de ir comprobando algunos elementos sólo. Concretamente, la idea es divide y vencerás, frase que probablemente te suene.
Los pasos son: comprobar si el elemento central de la lista es mayor o menor que el elemento que queremos buscar. Si es mayor, miramos en la primera mitad y comprobamos que el elemento central de la primera mitad sea mayor o menor que el elemento. Si es mayor, volvemos a mirar en la primera mitad de este subconjunto. Así hasta que encontremos el elemento.
Para que entiendas mejor, voy a poner un ejemplo, concretamente el que estábamos utilizando de frutas. Como estaba desordenado, vamos a ordenarlo:
Ahora, l es una lista de elementos ordenados. La lógica sería la siguiente:
Espero que este esquema sea de utilidad para que comprendas como funciona el algoritmo. Ahora, voy a ponerlo en formato pseudocódigo para que entiendas la lógica de programación:
lista = ['cereza', 'fresa', 'limón', 'manzana', 'naranja', 'plátano', 'tomate'] posición = tamaño(lista)/2 elemento_de_interés = 'cereza' FUNCIÓN_RECURSIVA buscar(lista, posición, elemento_de_interés): SI lista[posición] ES IGUAL A elemento_de_interés ENTONCES: DEVOLVER posición SINO: SI lista[posición] ES MAYOR A elemento_de_interés ENTONCES: buscar (lista, posición/2, elemento_de_interés) SINO: buscar (lista, posición + posición/2, elemento_de_interés)
En este caso, estamos utilizando la recursividad para aplicar el algoritmo. La recursividad es un recurso que viene muy bien para este tipo de tareas, donde tenemos que realizar la misma operación sobre diferentes subelementos.
Para programar este comportamiento en Python, haremos lo siguiente:
lista = ['cereza', 'fresa', 'limón', 'manzana', 'naranja', 'plátano', 'tomate'] posicion = int(len(lista)/2) elemento_de_interes = 'cereza' def buscar(lista, posicion, elemento_de_interes): if lista[posicion] == elemento_de_interes: return posicion elif lista[posicion] > elemento_de_interes: return buscar(lista, int(posicion/2), elemento_de_interes) else: return buscar(lista, posicion+int(posicion/2), elemento_de_interes)
Preguntas frecuentes
▶︎ ¿Qué es una lista en Python?
Una lista es un elemento estructurado que nos permite almacenar diferentes elementos simples. En Python, una lista puede tener datos de diferentes tipos siempre y cuando sean simples. Por ejemplo:
Estas sentencias son correctas. Para crear una lista, tenemos que usar los [corchetes] y especificar los datos dentro, separados por comas. Una lista tiene N-1 posiciones y en cada posición, tenemos un elemento:
También te voy a hablar de los diferentes algoritmos de búsqueda que hay y como implementar cada uno de ellos. Así que si quieres saber como buscar dentro de una lista en Python, sigue leyendo!
▶︎ Si quieres, puedes descargarte el código que vamos a utilizar en este tutorial directamente en la cuenta de github.
Deja una respuesta
Otras Entradas Relacionadas