Encontrar el mínimo de una lista sin usar la función min

Leblanc41 -  
 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

  1. mamiemando Mensajes publicados 33228 Fecha de registro   Estado Moderador Última intervención   7 944
     

    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

    0
    1. leblanc41
       

      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


        

      0
      1. yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención   1 588 > leblanc41
         

        ¿Has leído la respuesta dada el 1 de diciembre de 2022 a las 14:27?

        0
      2. Leblanc41 > yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención  
         

        Solo veo la de 14:42

        0
      3. yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención   1 588 > Leblanc41
         

        Lee esta también.

        0
  2. PierrotLeFou
     

    ¿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 ...

    0
  3. Phil_1857 Mensajes publicados 1883 Fecha de registro   Estado Miembro Última intervención   169
     

    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

    0
    1. yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención   1 588
       

      Utilizar uno de los elementos de la lista como mínimo de partida es perfectamente válido. Aquellos que prefieren un gran número pueden usar float('inf').

      0
      1. Phil_1857 Mensajes publicados 1883 Fecha de registro   Estado Miembro Última intervención   169 > yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención  
         

        sí, después de todo ..

        valor_mínimo = lista[0]

        para cada elemento de lista:

             si elemento < valor_mínimo: valor_mínimo = elemento

        retornar valor_mínimo

        0
      2. mamiemando Mensajes publicados 33228 Fecha de registro   Estado Moderador Última intervención   7 944 > Phil_1857 Mensajes publicados 1883 Fecha de registro   Estado Miembro Última intervención  
         

        ¡Con la condición de que la lista no esté vacía!

        0
      3. Phil_1857 Mensajes publicados 1883 Fecha de registro   Estado Miembro Última intervención   169 > mamiemando Mensajes publicados 33228 Fecha de registro   Estado Moderador Última intervención  
         

        por supuesto ...

        solo le estaba mostrando a Leblanc41 que la mecánica es muy simple

        al leer su código de ayer a las 18:18, vemos que no está claro para él

        0
  4. PierrotLeFou
     

    ¿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.

    0
  5. Phil_1857 Mensajes publicados 1883 Fecha de registro   Estado Miembro Última intervención   169
     

    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...

    0