¿La forma más eficiente de Python para elegir la cadena más larga en la lista?

Tengo una lista de longitud variable y estoy tratando de encontrar una manera de probar si el elemento de la lista que se está evaluando actualmente es la cadena más larga contenida en la lista. Y estoy usando Python 2.6.1

Por ejemplo:

mylist = ['123','123456','1234'] for each in mylist: if condition1: do_something() elif ___________________: #else if each is the longest string contained in mylist: do_something_else() 

Soy nuevo en Python y estoy seguro de que solo tengo un problema con el cerebro. Seguramente hay una lista de comprensión simple que es corta y elegante que estoy pasando por alto.

¡Gracias!

Desde la documentación de Python , puedes usar max :

 >>> mylist = ['123','123456','1234'] >>> print max(mylist, key=len) 123456 

¿Qué debería pasar si hay más de una cadena más larga (piensa ’12’ y ’01’)?

Intenta eso para obtener el elemento más largo.

 max_length,longest_element = max([(len(x),x) for x in ('a','b','aa')]) 

Y luego foreach regular

 for st in mylist: if len(st)==max_length:... 
 def longestWord(some_list): count = 0 #You set the count to 0 for i in some_list: # Go through the whole list if len(i) > count: #Checking for the longest word(string) count = len(i) word = i return ("the longest string is " + word) 

o mucho más fácil:

 max(some_list , key = len) 

Para obtener el elemento más pequeño o más grande en una lista, use las funciones mínimas y máximas integradas:

 lo = min(L) hi = max(L) As with sort (see below), you can pass in a key function 

que se utiliza para asignar los elementos de la lista antes de que se comparan:

 lo = min(L, key=int) hi = max(L, key=int) 

http://effbot.org/zone/python-list.htm

Parece que podrías usar la función max si la asignas correctamente para cadenas y la usas como comparación. Por supuesto, recomendaría simplemente encontrar el máximo una vez, no para cada elemento de la lista.

len(each) == max(len(x) for x in myList) o simplemente each == max(myList, key=len)

 def LongestEntry(lstName): totalEntries = len(lstName) currentEntry = 0 longestLength = 0 while currentEntry < totalEntries: thisEntry = len(str(lstName[currentEntry])) if int(thisEntry) > int(longestLength): longestLength = thisEntry longestEntry = currentEntry currentEntry += 1 return longestLength