开发者

How to find the shortest string in a list in Python

This seems like a pretty simple problem, but I'm looking for a short and sweet way of doing it that is still understandable (this isn't code golf).

Given a list of strings, what's the easiest way to find the shortest string?

The way that is most obvious to me i开发者_开发百科s roughly:

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

but that seems like a lot of code for this problem (at least in python).


The min function has an optional parameter key that lets you specify a function to determine the "sorting value" of each item. We just need to set this to the len function to get the shortest value:

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

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


Takes linear time:

   reduce(lambda x, y: x if len(x) < len(y) else y, l)


I'd use sorted(l, key=len)[0]


Potential answer:

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

However, this is probably very inefficient in that it sorts the entire list, which is unnecessary. We really just need the minimum.


As suggested in other answers, these solutions takes linear time. They need need to be guarded against empty iterables though:

import functools

strings = ["small str", "xs", "long string"]

if (strings):
    print( "shortest string:", functools.reduce(lambda x, y: x if len(x) < len(y) else y, strings) )
    # or if you use min:
    # print( "shortest string:", min(strings, key=len) )
else:
    print( "list of strings is empty" )


To find the shortest string in a list:

str = ['boy', 'girl', 'lamb', 'butterfly']

def len_str(string):
  return len(string)

def compare_len(list):
  x = []
  for i in range(len(list)):
    x.append(len_str(list[i]))
  return min(x) #change to max if you're looking for the largest length

compare_len(str)


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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜