字符串我有類似下面的字符串列表:的Python - 返回最長的從列表
stringList = ["a" , "aa", "aaa", "aaaa", "aaab", "aaac"]
我所試圖做的是返回列表中的所有最長的串,我一直在使用的最大嘗試功能,但它只返回一個值,而在這種情況下,有3串用的4
感謝任何幫助的長度!
字符串我有類似下面的字符串列表:的Python - 返回最長的從列表
stringList = ["a" , "aa", "aaa", "aaaa", "aaab", "aaac"]
我所試圖做的是返回列表中的所有最長的串,我一直在使用的最大嘗試功能,但它只返回一個值,而在這種情況下,有3串用的4
感謝任何幫助的長度!
使用list comprehension
和max
:
>>> 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']
事情是這樣的,也許:
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)
這是明確的最快的算法,而不是最Python的,但.. – 2013-05-02 17:12:37
這不是最快的。浪費'追加'太多了。 – 2013-05-02 17:14:01
@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
單列表解析(即使列表被處理多次):
[s for s in stringList if len(s) == len(max(stringList, key=len))]
由於Python v2.5,min()和max()有一個允許的可選參數鍵你要指定比較方法。
這個列表被處理了兩次以上:'if'被檢查了'stringList'中的每一個',所以'len(max(stringList,key = len))'計算了'len(stringList)'次。它會顯示二次表現,更多的是可惜。 – DSM 2013-05-02 18:08:09
@DSM:你說得對。我仍然必須習慣Python的解釋性質。 – 2013-05-02 18:23:24
1.find最長的字符串的長度2.filter長度等於說 – iMom0 2013-05-02 17:10:57
你是什麼意思是什麼呢?也許這個? >> http://stackoverflow.com/questions/873327/pythons-most-efficient-way-to-choose-longest-string-in-list << – grooveplex 2013-05-02 17:11:10