Перейти к содержимому

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

  • автор:

Найти самую длинную строку текста и заменить её пустой строкой

Author24 — интернет-сервис помощи студентам

Найти самую длинную строку текста и заменить её пустой строкой
Найти самую длинную строку текста и заменить её пустой строкой.

Найти самую короткую строку текста и заменить её
Найти самую короткую строку текста и заменить её фразой "С Новым годом!"

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

Найти самую короткую строку текста и заменить ее заданной фразой
Найти самую короткую строку текста и заменить её фразой "С Новым годом!"

710 / 349 / 120
Регистрация: 09.12.2020
Сообщений: 919

1 2 3 4 5 6
with open('input.txt', 'r') as f: a = f.readlines() c = [] for i in range(len(a)): c[i] = len(a[i]) a[c.index(max(c))] = ''

196 / 162 / 41
Регистрация: 13.05.2019
Сообщений: 833

1 2 3
s=text.split("\n") s[max((len(y),x) for x,y in enumerate(s))[1]]="" print("\n".join(s))

Добавлено через 1 минуту

ЦитатаСообщение от alilxxey Посмотреть сообщение

Он же пустой, ты чего
710 / 349 / 120
Регистрация: 09.12.2020
Сообщений: 919
Matrix3007, ой, да, пардон

c.append(len(a[i]))

137 / 95 / 48
Регистрация: 22.10.2012
Сообщений: 234

1 2 3 4 5 6
with open("input.txt") as f: text = f.readlines() row_len_list = map(lambda row: (row[0], len(row[1])), enumerate(text)) row_len_list = sorted(row_len_list, key=lambda x: x[1], reverse=True) text[row_len_list[0][0]] = "" print("".join(text))

196 / 162 / 41
Регистрация: 13.05.2019
Сообщений: 833
GorodetskiyKP, Нахождение максимума сортировкой.
137 / 95 / 48
Регистрация: 22.10.2012
Сообщений: 234

Не понял комментария.. сортировка нужна или нет.. в первоначальной постановке нет информации про использование (или запрет) сортировки

196 / 162 / 41
Регистрация: 13.05.2019
Сообщений: 833
GorodetskiyKP, Вы сортируете массив, чтобы найти максимум. Это очень неэффективно.
137 / 95 / 48
Регистрация: 22.10.2012
Сообщений: 234

ЦитатаСообщение от Matrix3007 Посмотреть сообщение

GorodetskiyKP, Вы сортируете массив, чтобы найти максимум. Это очень неэффективно.
Понял, спасибо!
Регистрация: 08.04.2021
Сообщений: 7
Выходит почему-то ошибка(
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь

Добавить в конец текста, находящегося в файле, самую длинную строку
Добавить в конец текста, находящегося в файле, самую длинную строку. <html <head>.

Найти самую длинную строку
Дано 5 строк, найти их длины и сохранить в массив.C++

Найти самую длинную строку
/* Самая длинная строка 1. Создай список строк. + 2. Считай с клавиатуры 5 строк и добавь в.

Найти самую длинную строку
2. Ввести n строк с консоли. Найти самую длинную строку. Вывести найденную строку и ее длину. В.

Найти самую длинную строку в файле
Собственно прога находит самую длинную строку в файле, но если длинных строк несколько то выводит.

Найти самую длинную строку в файле
Вроде все норм, вот только когда пытаюсь вывести через puts() — выводит все содержимое файла.

Или воспользуйтесь поиском по форуму:

Поиск максимального значения в списке на Python

В этой статье мы научимся находить максимальное значение в списке на Python. Для всестороннего понимания вопроса мы рассмотрим использование некоторых встроенных функций, простые подходы, а также небольшие реализации известных алгоритмов.

Сначала давайте вкратце рассмотрим, что такое список в Python и как найти в нем максимальное значение или просто наибольшее число.

Список в Python

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

Хранимые в списке данные определяются как разделенные запятыми значения, заключенные в квадратные скобки. Списки можно определять, используя любое имя переменной, а затем присваивая ей различные значения в квадратных скобках. Он является упорядоченным, изменяемым и допускает дублирование значений. Например:

 
list1 = ["Виктор", "Артем", "Роман"] list2 = [16, 78, 32, 67] list3 = ["яблоко", "манго", 16, "вишня", 3.4]

Далее мы рассмотрим возможные варианты кода на Python, реализующего поиск наибольшего элемента в списке, состоящем из сравниваемых элементов. В наших примерах будут использоваться следующие методы/функции:

  1. Встроенная функция max()
  2. Метод грубой силы (перебора)
  3. Функция reduce()
  4. Алгоритм Heap Queue (очередь с приоритетом)
  5. Функция sort()
  6. Функция sorted()
  7. Метод хвостовой рекурсии

№1 Нахождение максимального значения с помощью функции max()

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

В приведенном ниже примере список передается функции max в качестве аргумента.

Функция max() в Python, максимальное значение элемента

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

Синтаксис:
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 

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

>>> 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] 
  • ОБЗОРНАЯ СТРАНИЦА РАЗДЕЛА
  • Функция abs(), абсолютное значение числа
  • Функция all(), все элементы True
  • Функция any(), хотя бы один элемент True
  • Функция ascii(), преобразует строку в ASCII
  • Функция bin(), число в двоичную строку
  • Класс bool(), логическое значение объекта
  • Функция breakpoint(), отладчик кода
  • Класс bytearray(), преобразует в массив байтов
  • Класс bytes(), преобразует в строку байтов
  • Функция callable(), проверяет можно ли вызвать объект
  • Функция chr(), число в символ Юникода
  • Класс classmethod, делает функцию методом класса
  • Функция compile() компилирует блок кода Python
  • Класс complex(), преобразует в комплексное число
  • Функция delattr(), удаляет атрибут объекта
  • Класс dict() создает словарь
  • Функция dir(), все атрибуты объекта
  • Функция divmod(), делит числа с остатком
  • Функция enumerate(), счетчик элементов последовательности
  • Функция eval(), выполняет строку-выражение с кодом
  • Функция exec(), выполняет блок кода
  • Функция filter(), фильтрует список по условию
  • Класс float(), преобразует в вещественное число
  • Функция format(), форматирует значение переменной
  • Класс frozenset(), преобразует в неизменяемое множество
  • Функция getattr(), значение атрибута по имени
  • Функция globals(), переменные глобальной области
  • Функция hasattr(), наличие атрибута объекта
  • Функция hash(), хэш-значение объекта
  • Функция help(), справка по любому объекту
  • Функция hex(), число в шестнадцатеричную строку
  • Функция id(), идентификатор объекта
  • Функция input(), ввод данных с клавиатуры
  • Класс int(), преобразует в тип int
  • Функция isinstance(), принадлежность экземпляра к классу
  • Функция issubclass(), проверяет наследование класса
  • Функция iter(), создает итератор
  • Функция len(), количество элементов объекта
  • Класс list(), преобразовывает в список
  • Функция locals(), переменные локальной области
  • Функция map(), обработка последовательности без цикла
  • Функция max(), максимальное значение элемента
  • Класс memoryview(), ссылка на буфер обмена
  • Функция min(), минимальное значение элемента
  • Функция next(), следующий элемент итератора
  • Класс object(), возвращает безликий объект
  • Функция oct(), число в восьмеричную строку
  • Функция open(), открывает файл на чтение/запись
  • Функция ord(), число символа Unicode
  • Функция pow(), возводит число в степень
  • Функция print(), печатает объект
  • Класс property(), метод класса как свойство
  • Класс range(), генерирует арифметические последовательности
  • Функция repr(), описание объекта
  • Функция reversed(), разворачивает последовательность
  • Функция round(), округляет число
  • Класс set(), создает или преобразовывает в множество
  • Функция setattr(), создает атрибут объекта
  • Класс slice(), шаблон среза
  • Функция sorted(), выполняет сортировку
  • Декоратор staticmethod(), метод класса в статический метод
  • Класс str(), преобразует объект в строку
  • Функция sum(), сумма последовательности
  • Функция super(), доступ к унаследованным методам
  • Класс tuple(), создает или преобразует в кортеж
  • Класс type(), возвращает тип объекта
  • Функция vars(), словарь переменных объекта
  • Функция zip(), объединить элементы в список кортежей
  • Функция __import__(), находит и импортирует модуль
  • Функция aiter(), создает асинхронный итератор
  • Функция anext(), следующий элемент асинхронного итератора

Найти самую длинную строку, которая является подстрокой всех слов

Требуется написать программу, которая принимает несколько слов, и нам нужно найти то, которое чаще всего повторяется. Подскажите, есть ли какие-нибудь функции? А то понятия не имею как это написать Пример ввода: Sample Samplin SamplingsFun Saplingdsajisfasfijoi Пример вывода: Sampl

Отслеживать
892 7 7 серебряных знаков 21 21 бронзовый знак
задан 22 ноя 2020 в 14:00
3 3 3 бронзовых знака
Задача не поставлена нормально. Кроме того, нужно показать свои размышления и попытки
22 ноя 2020 в 14:11
Ваши-то идеи где?
22 ноя 2020 в 14:16

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

22 ноя 2020 в 14:16

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

Судя по вашему вопросу ваш преподаватель не ждет от вас использование каких-либо "готовых функций". Это классическая задача на алгоритмы. Она сводится к нахождению общей подстроки попарно между всеми имеющимися строками. Алгоритм примерно такой:

  1. Берете первые 2 слова (обозначим их длины x1 и x2) и строите матрицу (двумерный массив) размером x1+1 на x2+1
  2. Заполняете первый столбец матрицы нулями
  3. Заполняете первую строку матрицы нулями
  4. Заполняете клетки на пересечении разных букв нулями
  5. Заполняете клетки на пересечении одинаковых букв значением равным значению на пересечении двух предыдущих индексов плюс 1 (то есть если сейчас вы смотрите индексы 5 и 7 и в заголовках этих двух индексов одинаковые буквы, то вы берете значение из клетки 4 и 6 и прибавляете к нему 1 и результат записываете в клетку с индексом 5 и 7)

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

  1. Находите в полученной матрице самое большое число.
  2. . и двигаясь по диагонали от него ( каждый раз уменьшая оба индекса на единицу переписываете посимвольно любой из заголовков матрицы - это и есть повторяющиеся символы в этой паре строк)

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

P.S.: Задача на столько типовая, что по ней и ей подобным есть целый ворох статей в вики, главное правильно сформулировать вопрос!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *