Подтвердить что ты не робот

Как найти кратчайшую строку в списке в Python

Это кажется довольно простой проблемой, но я ищу короткий и приятный способ сделать это, что по-прежнему понятно (это не кодекс гольфа).

Учитывая список строк, какой самый простой способ найти кратчайшую строку?

То, что наиболее очевидно для меня, примерно:

l = [...some strings...]
lens = map(l, len)
minlen, minind = min(lens)
shortest = l[minind]

но это похоже на много кода для этой проблемы (по крайней мере, на python).

4b9b3361

Ответ 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)