2009-05-16 18 views
149

Ho una lista di lunghezza variabile e sto cercando di trovare un modo per verificare se la voce di lista attualmente valutata è la stringa più lunga contenuta nella lista. E io sto usando Python 2.6.1Il modo più efficace di Python per scegliere la stringa più lunga nell'elenco?

Ad esempio:

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

Sono nuovo di zecca pitone e sono sicuro che sto avendo solo un peto cervello. Sicuramente c'è una semplice lista di comprensione che è breve ed elegante che sto trascurando?

Grazie!

risposta

392

Dal Python documentation in sé, è possibile utilizzare max:

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

Grazie y o molto. – user104997

+60

Assolutamente bellissimo. –

+0

Delizioso, davvero bello. –

1

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

+1

puoi fornire una breve spiegazione? –

1

Per ottenere l'elemento più piccolo o più grande in un elenco, utilizzare il minimo built-in e funzioni massime:

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

che viene utilizzato per mappare le voci di elenco prima di essere confrontati:

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

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

Sembra che è possibile utilizzare la funzione di massimo se si connette correttamente per le stringhe e utilizzarlo come il confronto. Suggerirei di trovare il massimo una volta, naturalmente, non per ogni elemento della lista.

4

Cosa dovrebbe succedere se ci sono più di 1 stringa più lunga (si pensi '12' e '01')?

Prova che per ottenere l'elemento più lungo

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

E poi regolare 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 molto più facile:

max(some_list , key = len) 
Problemi correlati