Encontrar la cadena más corta en una cadena de palabras en python

Quiero escribir una función que devuelva la longitud de la cadena más corta en una cadena de palabras. Ejemplo: “Yo como manzanas” devolvería 1 ya que “I” es la cuerda cortada. Esto es lo que hice, pero mincount no incrementa ni configura a 0 al final de cada cadena. ¿Qué tiene de malo?

def find_short(s): min=99 for i in s: mincount = 0 for j in i: print(j) mincount += 1 print(mincount) if (mincount < min): min = mincount return min 

 line = "I eat apples" mins = min(len(word) for word in line.split()) print(mins) 

line.split() dividirá la línea en una lista de palabras y luego encontrará la longitud mínima

Sugeriría la respuesta de @pramod si quiere una solución rápida y fácil, pero usaré su función y le mostraré lo que sucedió.

 def find_shortest(string): smallest_length = 99 for word in string.split(): current_length = 0 for letter in word: current_length += 1 if current_length < smallest_length: smallest_length = min_length return smallest_length 

Cambios

  • Cambié el nombre de la mayoría de las variables para aclarar su propósito
    • Cabe destacar que la variable min fue renombrada. Dado que min ya está definido como una función, esto puede causar problemas.
  • Se cambió for word in string a for word in string.split() . Por defecto, split() separa la cadena en una lista basada en espacios en blanco. Anteriormente, simplemente estaba iterando a través de cada personaje, lo cual es problemático.

Nota: el valor de smallest_length establecido en 99 supone que la longitud de la palabra más pequeña es de 99 caracteres o menos. Póngalo más alto para palabras más grandes.

Puedes usar min con una función clave:

 # split the string by spaces and pick the min based on the lenght of splitted string # Example: string = "I eat apples" final = min(string.split(), key = lambda x: len(x)) print(final) # >>> I 

Una función para establecer la longitud de la palabra más pequeña en un texto

 def lenmin(text): return len(min(text.split())) lenmin("I eat apples") 

Esto devolverá 1

Usando lambda

 >>> lenmin = lambda t: len(min(t.split())) >>> lenmin("you eat apples") 2