Самый эффективный способ Python выбрать самую длинную строку в списке? - PullRequest
200 голосов
/ 17 мая 2009

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

Например:

mylist = ['123','123456','1234']

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

Я новичок в python, и я уверен, что у меня просто пердит мозг. Конечно, есть простое и элегантное понимание списка, которое я пропускаю?

Спасибо!

Ответы [ 6 ]

521 голосов
/ 17 мая 2009

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

>>> mylist = ['123','123456','1234']
>>> print max(mylist, key=len)
123456
5 голосов
/ 17 мая 2009

Что должно произойти, если имеется более 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:...
4 голосов
/ 15 декабря 2016
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)
3 голосов
/ 17 мая 2009

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

lo = min(L)
hi = max(L) As with sort (see below), you can pass in a key function

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

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

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

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

1 голос
/ 22 октября 2011
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
1 голос
/ 17 мая 2009

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

...