2009-05-16 15 views
149

Tengo una lista de longitud variable y estoy tratando de encontrar una manera de comprobar si el elemento de la lista que se evalúa actualmente es la cadena más larga que figura en la lista. Y estoy usando Python 2.6.1¿La forma más eficiente de Python para elegir la cadena más larga en la lista?

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() 

estoy totalmente nuevo a Python y estoy seguro Estoy teniendo un pedo cerebral. Seguramente hay una lista simple de comprensión que es corta y elegante que estoy pasando por alto?

Gracias!

Respuesta

392

Desde el Python documentation sí, puede utilizar max:

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

Gracias y mucho. – user104997

+60

Absolutamente hermoso. –

+0

Encantador, muy agradable. –

1

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

+1

¿me puede dar una breve explicación? –

1

Para obtener el elemento más pequeño o más grande en una lista, utilice el min incorporado y funciones máximas:

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 usted podría utilizar la función max si asigna correctamente para cuerdas y usar eso como la comparación. Sin embargo, recomendaría encontrar el máximo una vez, por supuesto, no para cada elemento de la lista.

4

¿Qué debería pasar si hay más de 1 cadena más larga (piense en '12' y '01')?

Trate de que para obtener el elemento más largo

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

Y entonces regularmente foreach

for st in mylist: 
    if len(st)==max_length:... 
0
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 
1
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) 
Cuestiones relacionadas