Найбільш ефективний спосіб Python вибрати найдовший рядок у списку?


254

У мене є список змінної довжини і я намагаюся знайти спосіб перевірити, чи предмет списку, який зараз оцінюється, є найдовшим рядком, що міститься в списку. І я використовую 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()

Напевно, є просте розуміння списку, яке є коротким та елегантним, що я не помічаю?

Відповіді:


620

З самої документації 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"замість повернення всіх найдовших рядків.
Андерсон Грін

ditto @AndersonGreen. Чи можна перерозподілити метод таким чином, що однаково добре фіксує два + елементи списку, що відповідають виклику (клавіші)?
Девід Похитався

Здійснюючи своє запитання раніше, я пов’язав відповідь, яка виправляє проблему "перший-якщо-все-інше" рівну ...
Девід Похитався

4
Щоб отримати кожен найбільший елемент, за лінійний час ви повинні зробити m=max(map(len,xs)); [x for x in xs if len(x) == m]. Я не думаю, що це можна зробити красиво за один рядок.
Thomas Ahle

6

Що повинно відбутися, якщо є більше 1 найдовшого рядка (подумайте "12" та "01")?

Спробуйте це отримати найдовший елемент

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

А потім регулярні проповіди

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, якщо правильно вказати її для рядків і використовувати її як порівняння. Я б рекомендував просто знайти максимум раз, хоча, звичайно, не для кожного елемента в списку.



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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.