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).
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)
l = [...some strings...] l.sort(key=len) shortest = l
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" )
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 for ele in arr: if len(ele)<len(str2): str2=ele print ("the shortest element is :",str2)