2016-03-25 84 views
2

我試圖在非空列表中找到最長的單詞。我的功能應該返回最長的單詞。如果元素在列表中長度相等,我試圖在Unicode排序方面排序最長。例如,我試圖返回如下:在列表中找到最長的單詞python

>>> highest_word(['a', 'cat', 'sat']) 
    'sat' 
    >>> highest_word(['saturation', 'of', 'colour']) 
    'saturation' 
    >>> highest_word(['samIam']) 
    'samIam' 

到目前爲止,我可以得到的第一個工作,這是我到目前爲止的代碼:

def highest_word(wordlist): 
    longestWord = "" 
    max_len = 0 

    for word in wordlist: 

     if len(word) > max_len: 
      longestWord = len(word) 
      longestWord = word 
    return longestWord 

任何形式的幫助將是很大的讚賞。

回答

10

下面是一個簡單一個襯裏

print(max(['a', 'cat', 'sat', 'g'], key=lambda s: (len(s), s))) 

這通過列表中的每個元素映射到包含其長度 和字符串本身的元組。

當比較兩個元組AB時,如果A[0] > B[0]A > B。只有當A[0] == B[0]是考慮的第二個要素。所以如果兩個琴絃的長度相等,那麼琴絃就會被當作決勝者。

+0

是的,我已經嘗試此。它似乎不適用於第一個。它返回'貓'而不是'坐'。它似乎只適用於只有一個長詞的列表,比如第二個,它會返回「飽和」狀態。 – RoadRunner

+0

謝謝你們,我很欣賞幫助。他們是一種將兩個答案標記爲正確的方法嗎? – RoadRunner

+3

不,但我強烈建議您使用此解決方案。詹姆斯的答案是可行的,但它需要的時間與列表平方的長度成正比(O(N^2))。 'max(map(len,a))'遍歷整個列表,並且爲列表的每個元素計算。 BAH的答案需要時間來確定列表的長度(O(N))。 –

0

試試這個:

sorted([x for x in ['a', 'sat', 'cat'] if len(x) == max(map(len, a))])[-1] 
+0

謝謝,這工作得很好。 – RoadRunner

+2

這不是最佳。排序列表在O(n log n)時間完成,而在列表中找到最大值可以在O(n)中完成, – Dleep

相關問題