Как найти кратчайшую строку в списке в Python
Это кажется довольно простой проблемой, но я ищу короткий и приятный способ сделать это, что по-прежнему понятно (это не кодекс гольфа).
Учитывая список строк, какой самый простой способ найти кратчайшую строку?
То, что наиболее очевидно для меня, примерно:
l = [...some strings...]
lens = map(l, len)
minlen, minind = min(lens)
shortest = l[minind]
но это похоже на много кода для этой проблемы (по крайней мере, на python).
Ответы
Ответ 1
Функция min
имеет необязательный параметр key
, который позволяет вам указать функцию для определения "значения сортировки" каждого элемента, Нам просто нужно установить это функцию len
, чтобы получить самое короткое значение:
strings = ["some", "example", "words", "that", "i", "am", "fond", "of"]
print min(strings, key=len) # prints "i"
Ответ 2
Принимает линейное время:
reduce(lambda x, y: x if len(x) < len(y) else y, l)
Ответ 3
Я бы использовал sorted(l, key=len)[0]
Ответ 4
Потенциальный ответ:
l = [...some strings...]
l.sort(key=len)
shortest = l[0]
Однако это, вероятно, очень неэффективно, поскольку он сортирует весь список, что необязательно. Нам действительно нужен минимум.
Ответ 5
Как предполагается в других ответах, эти решения занимают линейное время. Они должны быть защищены от пустых повторений:
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" )
Ответ 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)