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.