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

##
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"
```

##
Answer #2:

Takes linear time:

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

##
Answer #3:

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

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

##
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" )
```

##
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)
```