Encontrar el mínimo de una lista sin usar la función min
PierrotLeFou -
Hola,
Debo resolver el siguiente ejercicio:
Escribe una función llamada minimum que acepte como argumento una lista de números y devuelva su valor mínimo. En el caso de una lista vacía, devuelve el valor None.
Ten en cuenta que, en el marco de este ejercicio, no debes LLAMAR a la función estándar min, la cual ha sido temporalmente inutilizable en el contexto de este ejercicio. Además, ten en cuenta que tu función no debe imprimir nada.
Aquí está mi código
def minimum(liste): max = liste[0] longueur = len(liste) indice_max = 0 for i in range(longueur): if liste[i] <= minimum: minimum = liste[i] indice_max = i return None
6 respuestas
-
Hola,
Casi lo tienes. El único problema es que actualmente siempre devuelves None.
- l2: esta línea fallará si la lista está vacía ya que lista[0] no estará definido. Por lo tanto, debes comprobar primero que la lista tenga al menos un elemento (por ejemplo, if len(lista) >0 : ..., o de manera más concisa, con el test if lista: ...).
- Deberías renombrar tu variable max a valor_min.
- Te desaconsejo nombrar variables min o max ya que son los nombres de dos primitivas de python, y aunque el lenguaje lo tolera, es una mala idea en general (ya que al hacer esto la función de python ya no es visible, el símbolo min o max ahora designa tu variable).
- Si la lista está vacía, puedes devolver directamente None.
- l4: Si la lista está vacía, es decir, si no entras en el bucle for, indice_min debe ser None. Por lo tanto, es necesario revisar la manera en que lo inicializas. Dado que en la línea 2 tendrás que comprobar si la lista está vacía, puedes devolver directamente None en esta comprobación.
- l2-l6-l7: Comparas lista[i] con mínimo. Sin embargo, mínimo es el nombre de tu función, por lo que comparas dos cosas incomparables. Sospecho que, según cómo comenzaste tu código, querrías hacer la comparación con valor_min.
- l3-l5: puedes eliminar la línea 3 si reemplazas la línea 5 por for i in range(len(lista)):. El código seguirá siendo igual de legible y no afectará a su rendimiento.
- l9: si la lista no está vacía, tu función debe devolver valor_min.
¿Puedes proponer un código corregido que tenga en cuenta estas recomendaciones?
Buena suerte
-
Su código ha generado una excepción inesperada
- especialmente en el contexto de:
minimum([])
- el mensaje del intérprete es:
Traceback (most recent call last): File "solution", line 2, in minimum IndexError: list index out of range
Su puntuación es
50/100.def minimum(liste): valeur_min = liste[0] indice_max = 0 for i in range(len(liste)): if liste[i] <= minimum: minimum = liste[i] liste_min = i return valeur_min
Lee esta también.
- especialmente en el contexto de:
- l2: esta línea fallará si la lista está vacía ya que lista[0] no estará definido. Por lo tanto, debes comprobar primero que la lista tenga al menos un elemento (por ejemplo, if len(lista) >0 : ..., o de manera más concisa, con el test if lista: ...).
-
¿Para qué te sirve valor_min?
¿Y cuándo verificas si la lista está vacía?
mininum es el nombre de la función y decides que es una variable ... -
Hola,
¿Para qué sirven las variables indice_max y lista_min?
Y valor_min no debería ser lista[0]
Hay que definir valor_min como un gran número (99999 por ejemplo)
Luego, hay que iterar sobre los elementos de la lista:
si lista[i] < valor_min : valor_min = lista[i]
y después de salir del bucle: return(valor_min)
Se puede hacer en 5 líneas de código
-
¿Por qué no dar el primero de la lista como mínimo y recorrer a partir del segundo en lugar de dar un gran número como primer mínimo?
Supongo que ya hemos comprobado si la lista no está vacía.
-
sí, es lo que decía en mi respuesta de las 16:07
valor_mini = lista[0]
no recorro a partir de lista[1], pero eso no cambia mucho...
-