2011-08-29 353 views
19

這似乎是一個非常簡單的問題,但我正在尋找一種簡單而又可愛的方式來實現這一點,這仍然可以理解(這不是代碼高爾夫)。如何在Python列表中找到最短的字符串

給出一個字符串列表,找到最短字符串的最簡單方法是什麼?

這是最明顯的,以我的方式大致是:

l = [...some strings...] 
lens = map(l, len) 
minlen, minind = min(lens) 
shortest = l[minind] 

,但似乎像很多的代碼針對此問題(至少在Python)。

回答

59

The min function有一個可選參數key,它允許您指定一個函數來確定每個項目的「排序值」。我們只是需要將其設置爲the len function獲得最短值:

strings = ["some", "example", "words", "that", "i", "am", "fond", "of"] 

print min(strings, key=len) # prints "i" 
+5

多麼明顯!我無法相信我錯過了這一點。 – leecbaker

+0

看來你可以做min(字符串),因爲長度是min默認使用的值 –

+0

@joelgoldstick:這是不正確的。試試'min([「b」,「aa」])'。 –

0

潛在答案:

l = [...some strings...] 
l.sort(key=len) 
shortest = l[0] 

然而,這可能是因爲它排序整個列表,這是不必要的效率非常低。我們真的只需要最低限度。

1

我會使用sorted(l, key=len)[0]

+2

這太過分了。除了概念上太複雜的答案之外,排序是'O(n log n)',而'min'是'O(n)'。 – delnan

+0

@delnan我不知道我是否同意「概念複雜」,但我同意使用'min'要好得多(以及稍後發佈的reduce版本)。 – carlpett

+3

更不用說對於大量輸入而言效率低下,它也是錯誤的,而是返回_longest_字符串。修正至少... – carlpett

2

注意到線性時間:

reduce(lambda x, y: x if len(x) < len(y) else y, l) 
-1
arr=('bibhu','prasanna','behera','jhgffgfgfgfg') 
str1='' 

#print (len(str)) 
for ele in arr: 
    print (ele,ele[::-1]) 
    if len(ele)>len(str1): 
     str1=ele 
    elif len(ele)<len(str2): 
     str2=ele 
print ("the longest element is :",str1) 
str2=arr[0] 
for ele in arr: 
    if len(ele)<len(str2): 
     str2=ele 

print ("the shortest element is :",str2) 
相關問題