How to find the shortest string in a list in Python
PythonPython Problem Overview
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).
Python Solutions
Solution 1 - 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"
Solution 2 - Python
I'd use sorted(l, key=len)[0]
Solution 3 - Python
Takes linear time:
reduce(lambda x, y: x if len(x) < len(y) else y, l)
Solution 4 - Python
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.
Solution 5 - Python
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" )
Solution 6 - Python
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)
Solution 7 - Python
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)