Efektyviausias būdas „Python“ pasirinkti ilgiausią eilutę sąraše?

Turiu kintamo ilgio sąrašą ir bandau rasti būdą patikrinti, ar šiuo metu vertinamas sąrašo elementas yra ilgiausia eilutė sąraše. Ir aš naudoju Python 2.6.1

Pavyzdžiui:

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

Aš esu naujas su pythonu, ir aš tikiu, kad aš turiu smegenų bezdalius. Žinoma, yra paprastas supratimo sąrašas, kas yra trumpas ir elegantiškas, kas man trūksta?

Ačiū!

147
17 мая '09 в 0:15 2009-05-17 00:15 nustatė user104997 gegužės 17, '09, 0:15 2009-05-17 00:15
@ 6 atsakymai

Python dokumentuose galite naudoti max .

 >>> mylist = ['123','123456','1234'] >>> print max(mylist, key=len) 123456 
382
17 мая '09 в 0:19 2009-05-17 00:19 atsakė Paolo Bergantino gegužės 17, 09 d. 0:19, 2009-05-17 00:19

Kas turėtų atsitikti, jei yra daugiau nei viena ilgoji eilutė („12“ ir „01“)?

Pabandykite gauti ilgiausią elementą

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

Ir tada reguliariai skelbti

 for st in mylist: if len(st)==max_length:... 
4
17 мая '09 в 0:22 2009-05-17 00:22 atsakymą pateikė Elazar Leibovich gegužės 17 d., 09:22, 2009-05-17 00:22

len(each) == max(len(x) for x in myList) arba tiesiog each == max(myList, key=len)

1
17 мая '09 в 0:20 2009-05-17 00:20 atsakymą pateikė HarryM gegužės 17 d. , 09:20 , 2009-05-17 00:20

Jei norite gauti mažiausią ar didžiausią sąrašo elementą, naudokite įmontuotą min. Ir maks.

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

kuris naudojamas sąrašo elementams rodyti prieš juos lyginant:

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

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

Atrodo, kad galite naudoti maksimalią funkciją, jei teisingai suderinate jį su stygomis ir naudojate kaip palyginimą. Norėčiau rekomenduoti tiesiog rasti vieną kartą, nors, žinoma, ne kiekvienam sąrašo elementui.

1
17 мая '09 в 0:20 2009-05-17 00:20 atsakė Gavinui H , gegužės 17 d., 09:20, 2009-05-17 00:20
 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) 

arba daug paprasčiau:

 max(some_list , key = len) 
1
15 дек. Atsakymą pateikė Savo Vukoviћ . 2016-12-15 02:26 '16 at 2:26 am 2016-12-15 02:26
 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 
0
22 окт. Šį atsakymą Stijn Van den Bruel pateikė spalio 22 d. 2011-10-22 02:21 '11, 02:21 am 2011-10-22 02:21

Kiti klausimai apie „ arba klausimo pateikimas