How to find the shortest string in a list in Python

Question:

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

Asked By: leecbaker

||

Answers:

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

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

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

Answered By: carlpett

Takes linear time:

   reduce(lambda x, y: x if len(x) < len(y) else y, l)
Answered By: amit kumar
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

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

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)
Answered By: Gift
Categories: questions Tags:
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.