Самый эффективный способ Python выбрать самую длинную строку в списке?

255

У меня есть список переменной длины, и я пытаюсь найти способ проверить, является ли элемент списка, который в данный момент оценивается, самой длинной строкой, содержащейся в списке. И я использую Python 2.6.1

Например:

mylist = ['abc','abcdef','abcd']

for each in mylist:
    if condition1:
        do_something()
    elif ___________________: #else if each is the longest string contained in mylist:
        do_something_else()

Конечно, есть простое понимание списка, которое короткое и элегантное, что я пропускаю?

user104997
источник

Ответы:

621

Из самой документации Python вы можете использовать max:

>>> mylist = ['123','123456','1234']
>>> print max(mylist, key=len)
123456
Паоло Бергантино
источник
1
Не будет работать для Python 2.4. См. Этот пост и этот пост код для реализации под 2.4.
Кумба
13
Он возвращает только первую самую длинную строку: например, print(max(["this", "does", "work"], key=len))только возвращает "this"вместо того, чтобы возвращать все самые длинные строки.
Андерсон Грин
То же самое @AndersonGreen. Может ли метод быть повторно развернут таким образом, чтобы одинаково хорошо фиксировать два + элемента списка, отвечающих вызову (ключу)?
Дэвид Shaked
В ответ на мой предыдущий вопрос я связал ответ, который устраняет проблему «первый пункт, если все остальные равны» ...
Дэвид Шакед
4
Чтобы получить каждый наибольший элемент в линейном времени, вы должны сделать m=max(map(len,xs)); [x for x in xs if len(x) == m]. Я не думаю, что это можно сделать красиво в одну строку.
Томас Але
6

Что должно произойти, если имеется более 1 самой длинной строки (например, «12» и «01»)?

Попробуйте это, чтобы получить самый длинный элемент

max_length,longest_element = max([(len(x),x) for x in ('a','b','aa')])

И тогда регулярный foreach

for st in mylist:
    if len(st)==max_length:...
Элазар Лейбович
источник
5
def longestWord(some_list): 
    count = 0    #You set the count to 0
    for i in some_list: # Go through the whole list
        if len(i) > count: #Checking for the longest word(string)
            count = len(i)
            word = i
    return ("the longest string is " + word)

или намного проще:

max(some_list , key = len)
Саво Вуковић
источник
4

Чтобы получить самый маленький или самый большой элемент в списке, используйте встроенные функции min и max:

lo = min(L)
hi = max(L)

Как и в случае с сортировкой, вы можете передать аргумент «ключ», который используется для сопоставления элементов списка перед их сравнением:

lo = min(L, key=int)
hi = max(L, key=int)

http://effbot.org/zone/python-list.htm

Похоже, вы могли бы использовать функцию max, если вы правильно отобразите ее для строк и будете использовать ее в качестве сравнения. Я бы порекомендовал просто найти максимум один раз, хотя, конечно, не для каждого элемента в списке.

Гэвин Н
источник
2

len(each) == max(len(x) for x in myList) или просто each == max(myList, key=len)

HarryM
источник
4
Можете ли вы дать краткое объяснение?
Дэвид Shaked
1
def LongestEntry(lstName):
  totalEntries = len(lstName)
  currentEntry = 0
  longestLength = 0
  while currentEntry < totalEntries:
    thisEntry = len(str(lstName[currentEntry]))
    if int(thisEntry) > int(longestLength):
      longestLength = thisEntry
      longestEntry = currentEntry
    currentEntry += 1
  return longestLength
Стейн Ван ден Брюэль
источник