Как найти самую длинную строку питон

Sometimes, while working with Python Lists, we can have a problem in which we receive Strings as elements and wish to compute the String which has maximum length. This kind of problem can have applications in many domains. Let’s discuss certain ways in which this problem can be solved. 

Method #1 : Using loop This is the brute method in which we perform this task. In this, we run a loop to keep a memory of longest string length and return the string which has max length in list. 

Python3

test_list = ['gfg', 'is', 'best', 'for', 'geeks']

print("The original list : " + str(test_list))

max_len = -1

for ele in test_list:

    if len(ele) > max_len:

        max_len = len(ele)

        res = ele

print("Maximum length string is : " + res)

Output : 

The original list : ['gfg', 'is', 'best', 'for', 'geeks']
Maximum length string is : geeks

Time Complexity: O(n)
Auxiliary Space: O(1)

Method #2 : Using max() + key This method can also be used to solve this problem. In this, we use inbuilt max() with “len” as key argument to extract the string with the maximum length. 

Python3

test_list = ['gfg', 'is', 'best', 'for', 'geeks']

print("The original list : " + str(test_list))

res = max(test_list, key = len)

print("Maximum length string is : " + res)

Output : 

The original list : ['gfg', 'is', 'best', 'for', 'geeks']
Maximum length string is : geeks

Time Complexity: O(n) where n is the number of elements in the string list. The max() + key is used to perform the task and it takes O(n) time.
Auxiliary Space: O(1) constant additional space is created.

Method #3 : Using reduce() + lambda
In this method, we use the reduce() function from the functools module, and pass a lambda function as the first argument, which compares the length of the current and next elements and returns the element with the maximum length.

Python3

from functools import reduce

test_list = ['gfg', 'is', 'best', 'for', 'geeks']

print("The original list : " + str(test_list))

res = reduce(lambda x, y: x if len(x) > len(y) else y, test_list)

print("Maximum length string is : " + res)

Output

The original list : ['gfg', 'is', 'best', 'for', 'geeks']
Maximum length string is : geeks

Time Complexity: O(n) where n is the number of elements in the list
Auxiliary Space: O(1) as it uses only a single variable to store the result.

Method #4: Using recursive function. 

This method can also be used to solve this problem. In this, we use recursive function to extract the string with the maximum length. 

Python3

def find_maximum(lst,start=0,max_word=''):

  if start==len(lst): 

    return max_word

  if len(lst[start])>len(max_word): 

    max_word=lst[start]

  return find_maximum(lst,start+1,max_word) 

test_list = ['gfg', 'is', 'best', 'for', 'geeks']

print("The original list : " + str(test_list))

res = find_maximum(test_list)

print("Maximum length string is : " + res)

Output

The original list : ['gfg', 'is', 'best', 'for', 'geeks']
Maximum length string is : geeks

Time Complexity: O(n) 
Auxiliary Space: O(n) 

Method #4:Using a list comprehension

step-by-step algorithm for implementing the approach:

Initialize the list of strings.

Use a list comprehension to create a new list of string lengths. This iterates through each string in the original list and applies the len() function to get the length of each string.

Use the index() method on the lengths list to find the index of the longest string. The max() function returns the largest length, and the index() method returns the index of the first occurrence of that length.

Use the index of the longest string to retrieve the string from the original list.

Print the longest string.

Python3

test_list = ['gfg', 'is', 'best', 'for', 'geeks']

lengths = [len(s) for s in test_list]

longest_index = lengths.index(max(lengths))

longest_string = test_list[longest_index]

print("Longest string is : " + longest_string)

Output

Longest string is : geeks

time complexity: O(n), where n is the length of the test_list.

 auxiliary space complexity: O(n), because we create a new list to store the lengths of each string in the test_list. However, since the lengths list is only used to find the maximum length and then discarded, the space complexity is effectively O(1) in practice.

Method #4:Using the heapq module : 

Algorithm:

1.Initialize a list test_list with strings.
2.Use the heapq.nlargest() function to get the index of the largest element in the list based on the length of each string.
3.Use the index obtained in step 2 to get the corresponding string from the test_list.
4.Print the longest string.

Python3

import heapq

test_list = ['gfg', 'is', 'best', 'for', 'geeks']

index = heapq.nlargest(1, range(len(test_list)), key=lambda x: len(test_list[x]))[0]

longest_string = test_list[index]

print("Longest string is: " + longest_string)

Output

Longest string is: geeks

Time Complexity:

The time complexity of this algorithm is O(n log k), where n is the length of the list and k is the number of elements to be returned. In this case, we are only returning the single longest string, so k = 1, and the time complexity simplifies to O(n log 1) = O(n). This is because the heapq.nlargest() function has a time complexity of O(n log k) to find the k largest elements.
Space Complexity:

The space complexity of this algorithm is O(1), as we are only using a few variables to store the list of strings, the index of the largest string, and the longest string itself. We are not using any additional data structures that depend on the input size.

 Method #7: Using a sorted() function with a custom key

  • Initialize the list
  • Sort the list in descending order based on the length of each string
  • The first element in the sorted list will be the longest string
  • Print the result

Python3

test_list = ['gfg', 'is', 'best', 'for', 'geeks']

print("The original list: " + str(test_list))

res = sorted(test_list, key=len, reverse=True)[0]

print("Maximum length string is: " + res)

Output

The original list: ['gfg', 'is', 'best', 'for', 'geeks']
Maximum length string is: geeks

Time complexity: O(n log n) – sorting the list takes O(n log n) time in the worst case.
Auxiliary space: O(n) – we need to create a sorted copy of the list.

Last Updated :
04 May, 2023

Like Article

Save Article

I have a list of variable length and am trying to find a way to test if the list item currently being evaluated is the longest string contained in the list. And I am using Python 2.6.1

For example:

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()

Surely there’s a simple list comprehension that’s short and elegant that I’m overlooking?

Karl Knechtel's user avatar

Karl Knechtel

61.6k11 gold badges97 silver badges147 bronze badges

asked May 16, 2009 at 21:15

user104997's user avatar

From the Python documentation itself, you can use max:

>>> mylist = ['123','123456','1234']
>>> print max(mylist, key=len)
123456

answered May 16, 2009 at 21:19

Paolo Bergantino's user avatar

Paolo BergantinoPaolo Bergantino

479k81 gold badges516 silver badges436 bronze badges

8

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)

or much easier:

max(some_list , key = len)

pableiros's user avatar

pableiros

14.6k12 gold badges98 silver badges104 bronze badges

answered Dec 14, 2016 at 23:26

Саво Вуковић's user avatar

1

What should happen if there are more than 1 longest string (think ’12’, and ’01’)?

Try that to get the longest element

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

And then regular foreach

for st in mylist:
    if len(st)==max_length:...

answered May 16, 2009 at 21:22

Elazar Leibovich's user avatar

Elazar LeibovichElazar Leibovich

32.5k33 gold badges121 silver badges168 bronze badges

To get the smallest or largest item in a list, use the built-in min and max functions:

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

As with sort, you can pass in a «key» argument that is used to map the list items before they are compared:

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

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

Looks like you could use the max function if you map it correctly for strings and use that as the comparison. I would recommend just finding the max once though of course, not for each element in the list.

Sergey Bushmanov's user avatar

answered May 16, 2009 at 21:20

Gavin H's user avatar

Gavin HGavin H

10.2k2 gold badges35 silver badges42 bronze badges

len(each) == max(len(x) for x in myList) or just each == max(myList, key=len)

answered May 16, 2009 at 21:20

HarryM's user avatar

HarryMHarryM

1,87513 silver badges7 bronze badges

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

answered Oct 21, 2011 at 23:21

Stijn Van den Bruel's user avatar

In this article, we will learn to find the longest string from a List in Python. We will use some built-in functions and some custom code as well. Let’s first have a quick look over what is s list in Python.

Python List

Python has a built-in data type called list. It is like a collection of arrays with different methodology. Data inside the list can be of any type say, integer, string or a float value, or even a list type. The list uses comma-separated values within square brackets to store data. Lists can be defined using any variable name and then assigning different values to the list in a square bracket. The list is ordered, changeable, and allows duplicate values.

List Example

list1 = ["Ram", "Arun", "Kiran"]
list2 = [16, 78, 32, 67]
list3 = ["apple", "mango", 16, "cherry", 3.4]

Let us discuss two methods to find the longest string from a given Python List. The first method is a simple Brute Force Algorithm that uses for loop and another method uses built-in max() function of Python List that returns a string of maximum length.

Example: Find Longest String from List using For Loop

This is a Brute Force Approach. It simply uses for loop to iterate over the elements of the given list. It checks the length of each string element and returns the string of maximum length.

#input list
list1 = ['apple', 'banana', 'watermelon', 'orange'] 

max_len = -1
for ele in list1: 
    if(len(ele) > max_len): 
        max_len = len(ele) 
        res = ele 
        
print("Longest String is : ", res) 

Longest String is : watermelon

Example: Find Longest String from List using max() Function

This approach involves built-in max() function to find maximum or longest string from the given Python List. max() function takes two arguments, the iterable and other argument is key. Key = len to extract the string with the maximum length.

#input list
list1 = ['apple', 'banana', 'watermelon', 'orange'] 
res = max(list1, key=len) 
print("Longest String is  : ", res)

Longest String is : watermelon

Conclusion

In this article, we learned to find the longest string from the given Python List by using two methods. Firstly, we used for loop method and another was the max() function. We used some custom code as well.

Автор оригинала: Chris.

Используйте встроенный Python Макс () Функция с клавишным аргументом, чтобы найти самую длинную строку в списке. Позвоните Макс (lst,) Чтобы вернуть самую длинную строку в lst Использование встроенного Лен () Функция для ассоциирования веса каждой строки – самая длинная строка будет максимальной.

Постановка проблемы

Учитывая список строк Python. Найдите строку с максимальным количеством символов – самая длинная строка в списке.

Вот несколько примеров списка строк и желаемый выход:

# ['Alice', 'Bob', 'Pete']   ---->   'Alice'
# ['aaa', 'aaaa', 'aa']      ---->   'aaaa'
# ['']                       ---->   ''
# []                         ---->   ''

Решение: MAX () Функция с клавишным аргументом функции Len ()

Используйте встроенный Python Макс () Функция с клавишным аргументом, чтобы найти самую длинную строку в списке. Позвоните Макс (lst,) Чтобы вернуть самую длинную строку в lst используя Встроенный Лен () Функция для ассоциирования веса каждой строки – самая длинная строка будет максимальной.

Вот определение кода get_max_str () Функция, которая принимает список строк в качестве ввода и возвращает самую длинную строку в списке или ValueError. Если список пуст.

def get_max_str(lst):
    return max(lst, key=len)

Вот вывод на наших желаемых примерах:

print(get_max_str(['Alice', 'Bob', 'Pete']))
# 'Alice'

print(get_max_str(['aaa', 'aaaa', 'aa']))
# 'aaaa'

print(get_max_str(['']))
# ''

print(get_max_str([]))
# ValueError

Дело по границе: что, если список пуст?

Если вы хотите вернуть альтернативное значение в случае Список пуст Вы можете изменить get_max_str () Функция, чтобы включить второй дополнительный аргумент:

def get_max_str(lst, fallback=''):
    return max(lst, key=len) if lst else fallback


print(get_max_str([]))
# ''

print(get_max_str([], fallback='NOOOOOOOOO!!!!!!'))
# NOOOOOOOOO!!!!!!

Решение с циркой

Меньше Pythonic, но для начинающих кодеров, более читаемая версия – это следующий цикл, –

def get_max_str(lst, fallback=''):
    if not lst:
        return fallback

    max_str = lst[0]   # list is not empty

    for x in lst:
        if len(x) > len(max_str):
            max_str = x

    return max_str


print(get_max_str(['Alice', 'Bob', 'Pete']))
# 'Alice'

print(get_max_str(['aaa', 'aaaa', 'aa']))
# 'aaaa'

print(get_max_str(['']))
# ''

print(get_max_str([], fallback='NOOOOOOOOO!!!!!!'))
# NOOOOOOOOO!!!!!!

Работая в качестве исследователя в распределенных системах, доктор Кристиан Майер нашел свою любовь к учению студентов компьютерных наук.

Чтобы помочь студентам достичь более высоких уровней успеха Python, он основал сайт программирования образования Finxter.com Отказ Он автор популярной книги программирования Python одноклассники (Nostarch 2020), Coauthor of Кофе-брейк Python Серия самооставленных книг, энтузиаста компьютерных наук, Фрилансера и владелец одного из лучших 10 крупнейших Питон блоги по всему миру.

Его страсти пишут, чтение и кодирование. Но его величайшая страсть состоит в том, чтобы служить стремлению кодер через Finxter и помогать им повысить свои навыки. Вы можете присоединиться к его бесплатной академии электронной почты здесь.

Оригинал: “https://blog.finxter.com/how-to-find-the-longest-string-in-a-python-list/”

Находит максимальное значение элемента в последовательности.

Синтаксис:

max(iterable, *[, key, default])
max(arg1, arg2, *args[, key])

Параметры:

  • iterable — итерируемый объект,
  • key — должна быть функцией (принимает один аргумент), используется для порядка сравнения элементов итерируемого объекта. Функция вычисляется один раз,
  • default — значение по умолчанию, если итерируемый объект окажется пустым,
  • arg1...argN — позиционный аргумент,
  • *args — список позиционных аргументов.

Возвращаемое значение:

  • наибольшее значение объекта.

Описание:

Функция max() возвращает наибольшее значение элемента итерируемого объекта или самое большое из двух или более переданных позиционных аргументов.

  • Если указан один позиционный аргумент, он должен быть итерируемым объектом (список, кортеж, словарь и т.д.).
  • Если в функцию передается два или более позиционных аргумента, возвращается самый большой из них.
  • В случае, когда максимальное значение имеют сразу несколько аргументов. Возвращает первый по порядку элемент с максимальным значением. Это согласуется с другими инструментами сохранения стабильности сортировки, такими как sorted(iterable, key=keyfunc, reverse=True)[0] и heapq.nlargest(1, iterable, key=keyfunc)

Аргумент key — функция подобная той, которая используется в дополнительном методе списков list.sort(). Функция принимает один аргумент и используется для упорядочивания элементов.

>>> x = ['4', '11', '6', '31']
# функция `max` сравнивает
# числа как строки
>>> max(x)
'6'

# функция 'key=lambda i: int(i)' применяется
# к каждому элементу списка 'x', преобразуя 
# строки в тип 'int' и теперь функция `max`
# сравнивает элементы списка как числа.
>>> max(x, key=lambda i: int(i))
'31'

# или другое применение функции 'key'
# выбор списка с наибольшей суммой элементов 
>>> max([1,2,3,4], [3,4,5], key=sum)
[3, 4, 5]

Аргумент default по умолчанию указывает объект, который нужно вернуть, если предоставленный итерируемый объект пуст. Если итерация пуста и значение по умолчанию не указано, то возникает ошибка ValueError.

# Значение по умолчанию
>>> max([], default=10)
10

Функция max() сравнивает элементы, используя оператор <. Поэтому, все передаваемые в них значения должны быть сопоставимы друг с другом и одного типа, иначе бросается исключение TypeError

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

>>> x = list('abcdifgh')
>>> max(x)
# 'i'

Изменено в Python 3.8: Аргумент key может быть None.

Примеры поиска максимального значения в последовательности.

  • Нахождение самой длинной строки в списке строк;
  • Нахождение максимального значения в списке строк, записанных как целые числа;
  • Нахождения максимального значения в строке, которая состоит из чисел и строк;
  • Определение индекса у максимального значения в списке;
  • Выбор максимального значения для ключа или значения в словаре;
  • Нахождение списка с наибольшей суммой элементов в списке списков;
  • Нахождение списка с наибольшим количеством элементов в списке списков.
# использование позиционных аргументов
>>> max(5, 3, 6, 5, 6)
# 6

# использование в качестве аргумента - список
>>> max([1.2, 1.3, 1.5, 2, 5.52])
# 5.52

# комбинирование позиционных аргументов и списка
# при передаче списка 'x' происходит его распаковка
>>> x = (1.2, 1.3, 1.5, 2, 5.52)
>>> max(5, 3, 5, *x)
# 5,52

Нахождение самой длинной строки в списке строк.

Найдем самую длинную строку. В качестве ключевой функции используем len(). Она посчитает количество символов в строке каждого элемента списка строк, а функция max() выберет максимальное число. Строки можно передать например как позиционные аргументы, так и списком ['Jul', 'John', 'Vicky'], результат будет тот же.

>>> line = ['Jul', 'John', 'Vicky'] 
>>> max(line, key=len)
# 'Vicky'

Нахождение max() в списке строк, записанных как целые числа.

Есть список строк чисел и необходимо найти максимум, как если бы они были целыми числами? Если применить функцию max() к исходному списку «как есть», то она выберет наибольшее значение списка исходя из лексикографической сортировки. Для нахождения максимума, как числа, применим функцию lambda i: int(i) в качестве ключа key, которая «на лету» преобразует элементы списка в целые числа, тогда функция max() выберет то что нам нужно.

>>> x = ['4', '11', '6', '31']
>>> max(x)
# '6'

>>> max(x, key = lambda i: int(i))
# '31'

Нахождения max() в строке, которая состоит из чисел и строк.

Что бы найти максимум в строке, которая состоит из чисел и строк, необходимо сначала разделить исходную строку на список подстрок. Используем приемы, описанные в примерах функции sum():

  • по разделителю, например пробелу ' ' или ';' методом строки str.split(),
  • вытащить все цифры из исходной строки при помощи функцией re.findall().

Затем в цикле перебрать полученный список и все строки с цифрами преобразовать в соответствующие числовые типы и уже потом применить функцию

# исходная строка
>>> line = '12; 12,5; 14; один; 15.6; два'
# способы преобразования строки в список строк
# 1 способ по разделителю ';'
>>> line.split(';')
# ['12', ' 12,5', ' 14', ' один', ' 15.6', ' два']

# 2 способ по регулярному выражению
>>> import re
>>> match = re.findall(r'[d.?,?]+', line)
>>> list(match)
# ['12', '12,5', '14', '15.6']

Далее будем работать с более сложным списком, полученным 1 способом, где встречаются слова. И так, имеем список строк с цифрами и другими строками. Стоит задача: преобразовать строки с цифрами в соответствующие числовые типы и отбросить строки со словами, что бы потом найти максимум.

Задача усложняется тем, что вещественные числа в строках записаны как через запятую, так и через точку. Для необходимых проверок и преобразований определим функцию str_to_num().

>>> def str_to_num(str, chars=['.', ',']):
...     # убираем начальные и конечные пробелы
...     str = str.strip()
...     if (any(char in str for char in chars) and
...         str.replace('.', '').replace(',', '').isdigit()):
...          # если в строке есть точка или запятая и при их замене на ''
...          # строка состоит только из цифр то это тип float 
...         return float(str.replace(',', '.'))
...     elif str.isdigit():
...          # если строка состоит только из цифр то это тип int 
...         return int(str)

# полученный список строк 1-м способом
>>> str_list = ['12', ' 12,5', ' 14', ' один', ' 15.6', ' два']
# новый список чисел, где будем искать максимум
>>> num_list = []
>>> for i in str_list:
...     # применим функцию преобразования строки в число
...     n = str_to_num(i)
...     if n is not None:
...         # если функция возвращает число,
...         #  то добавляем в новый список
...         num_list.append(str_to_num(i))

>>> num_list
# [12, 12.5, 14, 15.6]
>>> max(num_list)
# 15.6

Определение индекса у максимального значения в списке.

Допустим есть список чисел и стоит задача, определить индекс максимального значения в этом списке. Для решения этой задачи необходимо пронумеровать список, т.е. создать кортеж — индекс/число, а затем найти максимум, используя в качестве ключа key=lambda i : i[1].

>>> lst = [1, 5, 3, 6, 9, 7]
# пронумеруем список 
>>> lst_num = list(enumerate(lst, 0))
>>> lst_num
# [(0, 1), (1, 5), (2, 3), (3, 6), (4, 9), (5, 7)]

# найдем максимум (из второго значения кортежей)
>>> t_max = max(lst_num, key=lambda i : i[1])
>>> t_max
# (4, 9)

# индекс максимального значения 
>>> t_max[0]
# 4

Нахождение max() для ключа или значения в словаре dict.

Допустим есть словарь, задача: найти максимальное значение ключа или самого значения ключа и вывести эту пару.

# имеем словарь
>>> d = {1: 3, 2: 4, 1: 9, 4: 1}
# преобразуем его в список отображение 
>>> key_val = d.items()
# преобразуем отображение в список
# кортежей (ключ, значение)
>>> key_val_list = list(key_val)
# [(1, 9), (2, 4), (4, 1)]

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

Но если необходимо получить пару (key, value), у которого наибольшее значение имеет значение ключа (второй элемент), то для этого нужно применить лямбда-функцию lambda i : i[1] в качестве аргумента key функции max(), которая укажет, из какого элемента кортежа выбирать наибольшее значение.

# происходит сравнение по 
# первым элементам кортежа 
>>> kv = max(key_val_list)
>>> kv
# (4, 1)

# максимальное значение ключа в словаре
>>> kv[0]
# 4


# меняем порядок сравнения
>>> kv = max(key_val_list, key=lambda i : i[1])
>>> kv
# (1, 9)

# максимальное значение в словаре
>>> kv[1]
# 9

# ключ этого значения в словаре
>>> kv[0]
# 1

# получаем максимальное значение из словаря
>>> d[kv[0]]
# 9

Нахождение списка с наибольшей суммой элементов в списке списков.

Для выполнения данной задачи, используем функцию max(), а в качестве ключевой функции применим встроенную функцию sum().

# исходный список
>>> lst = [[1, 2, 3], [4, 5], [1, 3, 4, 5], [10, 20]]
# выбираем список с наибольшей суммой элементов
>>> max(lst, key=sum)
# [10, 20]

Выбор списка с наибольшим количеством элементов из списка списков.

Для выполнения данной задачи, используем функцию max(), а в качестве ключевой функции применим встроенную функцию len().

# исходный список
>>> lst = [[1, 2, 3], [4, 5], [1, 3, 4, 5], [10, 20]]
# выбираем список с наибольшим количеством элементов
>>> max(lst, key=len)
# [1, 3, 4, 5]

Понравилась статья? Поделить с друзьями:
  • Как найти стержни для ручки
  • Как исправить грамматическую ошибку в предложении с деепричастным оборотом
  • Как составить свой распорядок дня на немецком языке
  • Как найти бильярдный стол
  • Как найти мой номер телефона на мегафоне