2013-05-02 100 views
0

字符串我有類似下面的字符串列表:的Python - 返回最長的從列表

stringList = ["a" , "aa", "aaa", "aaaa", "aaab", "aaac"] 

我所試圖做的是返回列表中的所有最長的串,我一直在使用的最大嘗試功能,但它只返回一個值,而在這種情況下,有3串用的4

感謝任何幫助的長度!

+0

1.find最長的字符串的長度2.filter長度等於說 – iMom0 2013-05-02 17:10:57

+0

你是什麼意思是什麼呢?也許這個? >> http://stackoverflow.com/questions/873327/pythons-most-efficient-way-to-choose-longest-string-in-list << – grooveplex 2013-05-02 17:11:10

回答

6

使用list comprehensionmax

>>> lis= ["a" , "aa", "aaa", "aaaa", "aaab", "aaac"] 

>>> le = max(len(x) for x in lis) #find out the max length  

>>> [x for x in lis if len(x) == le] #now filter list based on that max length 
['aaaa', 'aaab', 'aaac'] 
2

事情是這樣的,也許:

longest_len = 0 
longest_strings = [] 

for s in stringList: 
    if len(s) > longest_len: 
     longest_len = len(s) 
     longest_strings = [s] 
    elif len(s) == longest_len: 
     longest_strings.append(s) 
+1

這是明確的最快的算法,而不是最Python的,但.. – 2013-05-02 17:12:37

+1

這不是最快的。浪費'追加'太多了。 – 2013-05-02 17:14:01

+0

@BlaXpirit timeit和驚訝......雙榜遍歷爲100元和10000元較慢的1.22倍慢1.18倍。 [size = [abs(int(random.gauss(20,10)))+ 1 for _ in range(length)]]生成的字符串; stringList = [''.join(random.sample(longstring,s))for s in sizes]' – viraptor 2013-05-02 17:35:30

0

單列表解析(即使列表被處理多次):

[s for s in stringList if len(s) == len(max(stringList, key=len))] 

由於Python v2.5,min()和max()有一個允許的可選參數鍵你要指定比較方法。

+1

這個列表被處理了兩次以上:'if'被檢查了'stringList'中的每一個',所以'len(max(stringList,key = len))'計算了'len(stringList)'次。它會顯示二次表現,更多的是可惜。 – DSM 2013-05-02 18:08:09

+0

@DSM:你說得對。我仍然必須習慣Python的解釋性質。 – 2013-05-02 18:23:24