it-swarm.com.de

Pythons effizienteste Methode, um die längste Zeichenfolge in der Liste auszuwählen?

Ich habe eine Liste mit variabler Länge und versuche, eine Möglichkeit zu finden, um zu testen, ob das aktuell ausgewertete Listenelement die längste in der Liste enthaltene Zeichenfolge ist. Und ich benutze Python 2.6.1

Beispielsweise:

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 habe nur einen Hirnfurz. Sicher gibt es ein einfaches Listenverständnis, das kurz und elegant ist und das ich übersehen habe?

Vielen Dank!

207
user104997

In der Python-Dokumentation selbst können Sie max verwenden:

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

Was soll passieren, wenn es mehr als eine längste Zeichenfolge gibt (denken Sie an '12' und '01')?

Versuchen Sie das, um das längste Element zu erhalten

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:...
5
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 einfacher:

max(some_list , key = len)

Verwenden Sie die integrierten Min- und Max-Funktionen, um das kleinste oder größte Element in einer Liste abzurufen:

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

das wird verwendet, um die Listenelemente zuzuordnen, bevor sie verglichen werden:

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

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

Sieht so aus, als könnten Sie die Max-Funktion verwenden, wenn Sie sie korrekt für Zeichenfolgen zuordnen und als Vergleich verwenden. Ich würde empfehlen, das Maximum natürlich nur einmal zu finden, nicht für jedes Element in der Liste.

3
Gavin H

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

1
HarryM
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