Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
2 / 2 / 1
Регистрация: 08.11.2019
Сообщений: 79

Найти общее слово/фразу во всех строках

24.03.2025, 11:31. Показов 2380. Ответов 20

Студворк — интернет-сервис помощи студентам
Здравствуйте.

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

Пример:
В шкафу висело красивое платье
Девушка надела красивое платье
Её красивое платье привлекало внимание
На показе мод будет демонстрироваться красивое платье
Даже не знаю, как к этому подступиться, поэтому никаких своих вариантов кода привести не могу.

P.S. Если это фраза (несколько слов подряд), то результатом поиска должна быть фраза "красивое платье".
Результат "красивое" и/или "платье" не подходит.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.03.2025, 11:31
Ответы с готовыми решениями:

Нужно чтобы файл заменял в буфере обмена фразу из 12 символов на нужную мне фразу
Суть в том что нужно сделать такой функционал чтобы когда пользователь копирует набор символов из 12 или 24 символов код заменял на нужную...

Напечатать фразу «Мне k лет», учитывая при этом, что при некоторых значениях k слово «лет» надо заменить на слово «год»
Напечатать фразу «Мне k лет», учитывая при этом, что при некоторых значениях k слово «лет» надо заменить на слово «год»

Напишите программу, которая считывает слово (или фразу, неважно) и тут же выводит её, и больше ничего не делает
Напишите программу, которая считывает слово (или фразу, неважно) и тут же выводит её, и больше ничего не делает. Особое условие:...

20
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38195 / 21128 / 4309
Регистрация: 12.02.2012
Сообщений: 34,733
Записей в блоге: 14
24.03.2025, 13:31
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
def make_phrases(txt):
    
    res=[txt]
    tmp=txt.split(" ")
    sz=len(tmp)
    
    # Нарезаем всевозможные префиксы
 
    k=sz-1
    
    while k>=1:
        for i in range(sz-k+1):
            res.append(" ".join(tmp[i:i+k]))
        k=k-1
    return sorted(res,key=len,reverse=True) # сортируем по убыванию    
 
# ищем максимальную фразу
 
def task(lst): 
    pl=make_phrases(lst[0])
    for t in pl:
        flg=0
        for q in lst:
            if not (t in q):
                flg=1
                break
        if flg==0:
            return t
 
lst=["В шкафу висело красивое платье",
     "Девушка надела красивое платье",
     "Её красивое платье привлекало внимание",
     "На показе мод будет демонстрироваться красивое платье"]    
 
print(task(lst))
2
115 / 100 / 15
Регистрация: 24.07.2019
Сообщений: 314
24.03.2025, 13:35
Цитата Сообщение от TheBogdan Посмотреть сообщение
Каждое предложение это отдельная строка, т.е. по сути список.
можно начать с этого списка
ну а далее, берём самое короткое предложение (в нём точно будет искомое слово или фраза)
разбиваем его на множество слов
сравниваем элементы этого множества с любым другим предложением, можно взять второе по длине от наименьшего
1
71 / 55 / 24
Регистрация: 28.03.2016
Сообщений: 171
24.03.2025, 14:19
Как вариант: каждую строку разбиваем по пробелам (split), затем загоняем каждую в свой сет (Set) и выполняем пересечение (intersection) сетов. В итоге получится сет со словами, которые есть во всех строках.

Затем берем первую строку, проходим по всем словам, если слово есть в сете (in), то добавляем его в ответ.


За оптимальность решения не ручаюсь.
2
1956 / 874 / 352
Регистрация: 05.09.2021
Сообщений: 1,387
25.03.2025, 09:19
Лучший ответ Сообщение было отмечено TheBogdan как решение

Решение

TheBogdan,
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
data = [
    "В шкафу висело красивое платье",
    "Девушка надела красивое платье",
    "Её красивое платье привлекало внимание",
    "На показе мод будет демонстрироваться красивое платье",
]
 
 
def foo(data):
    strings = [string.split() for string in data]
    min_set = min(strings, key=len)
    for i in range(len(min_set), 0, -1):
        for j in range(len(min_set) - i + 1):
            text = " ".join(min_set[j : j + i + 1])
            if all(text in string for string in data):
                return text
 
 
print(foo(data))
Code
1
красивое платье
2
7 / 7 / 0
Регистрация: 25.03.2025
Сообщений: 16
25.03.2025, 18:37
Всем привет!

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
from itertools import permutations
 
 
def find_duplicate_words(*args: tuple[str]) -> set[str]:
    if len(args) < 2:
        raise ValueError("Должно быть не менее двух предложений в тексте!")
 
    # Начинаем с множества слов из первого предложения
    duplicate_words = set(args[0])
 
    # Перебираем остальные предложения
    for i in range(1, len(args)):
        current_words = set(args[i])
        duplicate_words.intersection_update(current_words)
 
        if not duplicate_words:
            print("В предложениях нет одинаковых слов.")
            return set()
 
    return duplicate_words
 
 
def find_word_order_in_repetitions(set_of_words: set[str], substring_string: str) -> None:
    sentences = substring_string.split('\n')
    for p in permutations(set_of_words):
        phrase = ' '.join(p)
        if all(phrase in sentence for sentence in sentences):
            print(f'Повторяющееся слово или словосочетание во всех предложениях: «{phrase}».')
 
 
if __name__ == '__main__':
    text = '''В шкафу висело красивое платье
Девушка надела красивое платье
Её красивое платье привлекало внимание
На показе мод будет демонстрироваться красивое платье'''
 
    # Разделение текста на слова
    lst = [sentence.split() for sentence in text.split('\n')]
 
    try:
        words = find_duplicate_words(*lst)
        if words:
            find_word_order_in_repetitions(words, text)
    except ValueError as e:
        print(e)
2
125 / 120 / 18
Регистрация: 05.08.2021
Сообщений: 527
27.02.2026, 16:10
Полностью уже давно ответили, но чисто для саморазвития попробовал вытащить хотя бы из двух первых строчек самую длинную фразу которая есть "и там и там"
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
s1 = 'В шкафу висело красивое платье'.split(' ')
s2 = 'Девушка надела красивое платье'.split(' ')
 
def f(s):
    c,r,l = 0,[],len(s)
    for i in range(l):
        #r += [[s[i]]]
        r += [s[:i]]
    for i in range(l):
         r += [s[c:l]]
         c += 1
    return list(map(lambda x: ' '.join(x), r))
         
def ff(a,b):
    return list(filter(lambda x: x in b, a))
 
print(max(ff(f(s1),f(s2)), key=len))
'В', 'В шкафу', 'В шкафу висело', 'В шкафу висело красивое', 'В шкафу висело красивое платье', 'шкафу висело красивое платье', 'висело красивое платье', 'красивое платье', 'платье'
________________________________________ ________________________________________ ________________________________________ __
'Девушка', 'Девушка надела', 'Девушка надела красивое', 'Девушка надела красивое платье', 'надела красивое платье', 'красивое платье', 'платье'
=>>>
красивое платье
Эх, всё равно не учитыватся всякое там "висело красивое", "надела красивое"...
Мда, задача не так и проста....
0
 Аватар для volodin661
6795 / 2292 / 348
Регистрация: 10.12.2013
Сообщений: 7,918
27.02.2026, 17:27
Цитата Сообщение от TheBogdan Посмотреть сообщение
Даже не знаю, как к этому подступиться
https://en.wikipedia.org/wiki/... _substring
2
 Аватар для Semen-Semenich
5237 / 3481 / 1176
Регистрация: 21.03.2016
Сообщений: 8,310
28.02.2026, 12:52
Цитата Сообщение от Zloyalex100 Посмотреть сообщение
самую длинную фразу которая есть "и там и там"
зачем? ищем все слова что есть во всех строках если это фраза то все слова из фразы будут присутствовать
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
text = '''В шкафу висело красивое платье
Девушка надела красивое платье
Её красивое платье привлекало внимание
На показе мод будет демонстрироваться красивое платье'''
 
dict_occurrences = {}
list_strings = text.split('\n')
number_lines = 0
words_first_line = list_strings[0].split()
for line in list_strings:
    number_lines += 1
    for word in line.split():
        dict_occurrences[word] = dict_occurrences.setdefault(word, 0) +1
print(' '.join(filter(lambda x : dict_occurrences.get(x) == number_lines, words_first_line)))
можно даже выбрать из всех строк не только фразы но и отдельные слова если они будут повторятся. для этого сравниваем индексы соседних слов во всех строках и если индексы повторяющихся слов отличаются на 1 то скорее всего это фраза, остальные повторы это отдельные слова
2
 Аватар для Aviz__
2755 / 2062 / 509
Регистрация: 17.02.2014
Сообщений: 9,492
28.02.2026, 19:34
еще вариант берете))?
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
text = '''В шкафу висело красивое платье
Девушка надела красивое платье
Её красивое платье привлекало внимание
На показе мод будет демонстрироваться красивое платье'''
 
text_lines = text.split('\n')
first_line = text_lines[0].split()
common_words = set(first_line)
 
for line in text_lines[1:]:
    common_words &= set(line.split())
 
fr = ' '.join(word for word in first_line if word in common_words)
print(fr)
1
90 / 125 / 28
Регистрация: 17.10.2010
Сообщений: 1,332
28.02.2026, 19:47
А как сделать, чтобы программа искала общее слово/фразу, когда вводится предложение с клавиатуры?
0
 Аватар для Aviz__
2755 / 2062 / 509
Регистрация: 17.02.2014
Сообщений: 9,492
28.02.2026, 20:42
Цитата Сообщение от isaak Посмотреть сообщение
с клавиатуры
Python
1
2
3
4
import sys
 
lines = sys.stdin.read().strip().split('\n')
print(lines)
Для завершения ввода Ctrl + D (если в консоли Linux или IDE PyCharm), либо Ctrl + Z, затем Enter
0
90 / 125 / 28
Регистрация: 17.10.2010
Сообщений: 1,332
28.02.2026, 21:45
Цитата Сообщение от Aviz__ Посмотреть сообщение
Python
1
2
3
import sys
lines = sys.stdin.read().strip().split('\n')
print(lines)
Для завершения ввода Ctrl + D (если в консоли Linux или IDE PyCharm), либо Ctrl + Z, затем Enter
Выдает совершенно другой результат:
В шкафу висело красивое платье
Девушка надела красивое платье
Её красивое платье привлекало внимание
На показе мод будет демонстрироваться красивое платье^D
['В шкафу висело красивое платье', 'Девушка надела красивое платье', 'Её красивое платье привлекало внимание', 'На показе мод будет демонстрироваться красивое платье']

Process finished with exit code 0
Миниатюры
Найти общее слово/фразу во всех строках  
0
 Аватар для Aviz__
2755 / 2062 / 509
Регистрация: 17.02.2014
Сообщений: 9,492
01.03.2026, 08:01
isaak, удивил ты меня "сообразительностью"!
это -
Цитата Сообщение от Aviz__ Посмотреть сообщение
text_lines
и это -
Цитата Сообщение от Aviz__ Посмотреть сообщение
lines = sys.stdin.read().strip().split('\n')
сильно отличаются?
0
90 / 125 / 28
Регистрация: 17.10.2010
Сообщений: 1,332
01.03.2026, 12:33
Так я для завершения ввода нажал Ctrl + D и твоя программа должна была вывести часто, встречающуюся фразу в предложениях: "красивое платье". А она выводит чепуху.
Миниатюры
Найти общее слово/фразу во всех строках  
0
 Аватар для Aviz__
2755 / 2062 / 509
Регистрация: 17.02.2014
Сообщений: 9,492
01.03.2026, 13:07
isaak,
Кликните здесь для просмотра всего текста
не усугубляй восхищение твоим "умом", пожалуйста! ну, если ты с Андрюшей Цепиховичем на одной волне, тогда, конечно, прости, вы тут бессильны изменить природу! Бог каждому дает свой крест...
0
90 / 125 / 28
Регистрация: 17.10.2010
Сообщений: 1,332
01.03.2026, 13:58
Aviz__, понятно похоже тебя жизнь обидела не только умом, но и во всех сферах. Слабо признать, что твой последний код ошибочен, что ты можешь ошибаться. Вот как раз тебя Бог и обделил тебя умом.
0
 Аватар для Aviz__
2755 / 2062 / 509
Регистрация: 17.02.2014
Сообщений: 9,492
01.03.2026, 14:13
isaak, спасибо, что не стал отпираться! прости, что попал в точку!
0
90 / 125 / 28
Регистрация: 17.10.2010
Сообщений: 1,332
01.03.2026, 14:19
Прежде чем обсуждать других, прежде всего посмотри на себя, у тебя пошел уже пошел кризис во всех сферах, включая мышление. Спасибо, что сообщил мне об этом.
0
 Аватар для Aviz__
2755 / 2062 / 509
Регистрация: 17.02.2014
Сообщений: 9,492
01.03.2026, 16:27
Цитата Сообщение от isaak Посмотреть сообщение
Спасибо
Пожалуйста!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
01.03.2026, 16:27
Помогаю со студенческими работами здесь

Пользователь вводит слово или фразу(каждый символ считается за 40 коп.) и программа выводит стоимость этого сообщения
Помогите пожалуйста! Пользователь вводит слово или фразу(каждый символ считается за 40 коп.) и программа выводит стоимость этого сообщения....

Изменить слово в привычную фразу
У Стефана есть друг – маленькая робо-птичка. Какое то время он пытался научить ее говорить по-английски. И вот сегодня она произнесла...

Общее количество символов в строках, исключая строки с длиной меньше 3 символов
Задача 1. Имена 2 Что нужно сделать Есть файл people.txt, в котором построчно хранится N имён пользователей. Напишите...

Найти определенные фразы в файле и посчитать их долю в общем количестве фраз
Есть файл (выгруженный лог запросов): https://yadi.sk/d/A-98NjcA3TktXp 1. Необходимо вывести все запросы, содержащиеся в столбце...

Вывести те события, которые с проверочной фразой имеет не менее 5 общих символов
Напишите программу, которая выведет только нечто особенное! То, что с проверочной фразой имеет не менее 5 общих символов. Формат ввода...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Вывод данных через динамический список в справочнике
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru