2009-05-16 3 views
149

Ich habe eine Liste variabler Länge und versuche einen Weg zu finden zu testen, ob das Listenelement, das gerade ausgewertet wird, die längste in der Liste enthaltene Zeichenfolge ist. Und ich bin mit Python 2.6.1Python ist die effizienteste Möglichkeit, längste Zeichenfolge in der Liste zu wählen?

Zum Beispiel:

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

Ich bin ganz neu in Python und ich bin sicher, ich bin nur ein Gehirn Furz habe. Sicherlich gibt es ein einfaches Listenverständnis, das kurz und elegant ist, das ich übersehe?

Danke!

Antwort

392

Vom Python documentation selbst können Sie max verwenden:

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

Thank y Ou sehr viel. – user104997

+60

Absolut schön. –

+0

Herrlich, wirklich nett. –

1

len(each) == max(len(x) for x in myList) oder nur each == max(myList, key=len)

+1

können Sie eine kurze Erklärung geben? –

1

Um das kleinste oder größte Element in einer Liste zu erhalten, verwenden Sie das eingebaute in min und max Funktionen:

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

das verwendet wird die Listenelemente zuordnen, bevor sie verglichen werden:

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

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

Sieht aus wie Sie die Max-Funktion verwenden können, wenn Sie es richtig für Streicher und verwenden Karte, die als Vergleich. Ich würde empfehlen, nur einmal das Maximum zu finden, natürlich nicht für jedes Element in der Liste.

4

Was passiert, wenn es mehr als 1 längste Zeichenfolge gibt (denken Sie an "12" und "01")?

die versuchen, die längste Element

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

Und dann regelmäßig 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) 

oder viel leichter zu bekommen:

max(some_list , key = len)