How to find the shortest string in a list in Python

Posted on

Question :

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 is 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).

Answer #1:

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"
Answered By: Jeremy

Answer #2:

Takes linear time:

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

Answer #3:

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

Answered By: carlpett

Answer #4:

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.

Answered By: leecbaker

Answer #5:

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" )
Answered By: Pedro Lopes

Answer #6:

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) 
Answered By: bibhu

Leave a Reply

Your email address will not be published. Required fields are marked *