Il modo più efficiente di Python per scegliere la stringa più lunga nell'elenco?


254

Ho un elenco di lunghezza variabile e sto cercando di trovare un modo per verificare se l'elemento dell'elenco attualmente in valutazione è la stringa più lunga contenuta nell'elenco. E sto usando Python 2.6.1

Per esempio:

mylist = ['abc','abcdef','abcd']

for each in mylist:
    if condition1:
        do_something()
    elif ___________________: #else if each is the longest string contained in mylist:
        do_something_else()

Sicuramente c'è una semplice comprensione dell'elenco che è breve ed elegante che sto trascurando?

Risposte:


620

Dalla stessa documentazione di Python , puoi usare max:

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

1
Non funzionerà con Python 2.4. Vedi questo post e questo post per il codice da implementare in 2.4.
Kumba,

13
Restituisce solo la prima stringa più lunga: ad esempio, print(max(["this", "does", "work"], key=len))restituisce solo "this"invece di restituire tutte le stringhe più lunghe.
Anderson Green,

idem @AndersonGreen. Il metodo può essere ridistribuito in modo da catturare ugualmente bene due + elementi dell'elenco che soddisfano la chiamata (chiave)?
David Agitato il

In seguito alla mia domanda di prima, ho collegato una risposta che risolve il problema del primo elemento se tutto il resto uguale ...
David Shaked

4
Per ottenere ogni elemento più grande, in tempo lineare, devi fare m=max(map(len,xs)); [x for x in xs if len(x) == m]. Non penso che si possa fare bene in una riga.
Thomas Ahle,

6

Cosa dovrebbe succedere se ci sono più di 1 stringa più lunga (pensa "12" e "01")?

Provalo per ottenere l'elemento più lungo

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

E poi foreach regolare

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)

o molto più facile:

max(some_list , key = len)

4

Per ottenere l'elemento più piccolo o più grande in un elenco, utilizzare le funzioni min e max incorporate:

lo = min(L)
hi = max(L)

Come per l'ordinamento, è possibile passare un argomento "chiave" utilizzato per mappare gli elementi dell'elenco prima che vengano confrontati:

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

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

Sembra che potresti usare la funzione max se la mappa correttamente per le stringhe e la usi come confronto. Consiglierei solo di trovare il massimo una volta, ovviamente, non per ogni elemento nell'elenco.


2

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


4
puoi fornire una breve spiegazione?
David Agitato il

1
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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.