Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.54/48: Рейтинг темы: голосов - 48, средняя оценка - 4.54
0 / 0 / 0
Регистрация: 09.05.2020
Сообщений: 49

Найти слова, которые встречаются только один раз

11.10.2020, 16:54. Показов 10000. Ответов 29

Студворк — интернет-сервис помощи студентам
Дана последовательность слов, разделенных пробелами, в конце точка. Образовать новую ленту из слов, которые встречаются только один раз, в том порядке, в котором они встречаются.
Строку ввести самостоятельно

Добавлено через 38 минут
Словарь не использовать!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.10.2020, 16:54
Ответы с готовыми решениями:

Вывести только те буквы двух слов, которые встречаются в обоих словах только один раз
Добрый день! Помогите решить, пожалуйста. Задано два слова. Составить программу, которая определяет и выводит те буквы слов, которые...

Выбрать подпоследовательности которые встречаются только один раз
3. Из заданной символьной последовательности, состоящих из букв английского алфавита, выбрать лишь те, которые встречаются только ОДИН раз....

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

29
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
11.10.2020, 17:03
Ну список возьми...

Python
1
2
3
4
5
6
7
>>> l = []
>>> for i in 'Trixie is best pony pony'.split():
...     if i in l: l.remove(i)
...     else: l.append(i)
... 
>>> l
['Trixie', 'is', 'best']
Добавлено через 1 минуту
Хотя для строки 'Trixie is best pony pony pony' уже работать не будет...
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
11.10.2020, 17:21
Цитата Сообщение от Jordan2323 Посмотреть сообщение
Словарь не использовать!
А что можно? Озвучь полный объем требований: допустимые контейнеры, требования к ОЗУ, допустимая сложность алгоритма.
Квадратичных алгоритмов мы тебе штук 10 может дать. Только ты же потом будешь жаловаться, что "не проходит по времени и т.д."
0
0 / 0 / 0
Регистрация: 09.05.2020
Сообщений: 49
11.10.2020, 17:23  [ТС]
Нужно не через список ,только через string
s = "Trixie is best pony pony."
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
11.10.2020, 17:25
Цитата Сообщение от Jordan2323 Посмотреть сообщение
Нужно не через список ,только через string
Кто тебе такое сказал? Покажи исходную формулировку задачи.
Список всегда можно склеить обратно в строку.
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
11.10.2020, 17:30
Python
1
2
3
4
5
6
7
>>> s = 'Trixie is best pony pony pony.'
>>> s2 = ''
>>> for i in s.rstrip('.').split():
...     if s.count(i) == 1: s2 += ' ' + i
... 
>>> s2
' Trixie is best'
1
0 / 0 / 0
Регистрация: 09.05.2020
Сообщений: 49
11.10.2020, 17:37  [ТС]
Просто нужно сделать новую строку ,в которой будут слова ,которые встречаются только один раз.Елементарные футкции например append ,split ну и в цыкле ето прописать. Пример:
str1="Fantastic day and night night."
а во вторую строку записать слова которые встретились один раз
Без словарей.Только начал изучать пайтон, такое задание задали...

Добавлено через 3 минуты
Дана последовательность слов, разделенных пробелами, в конце точка. Образовать новую ленту из слов, которые встречаются только один раз, в том порядке, в котором они встречаются.
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
11.10.2020, 17:45
Цитата Сообщение от Jordan2323 Посмотреть сообщение
str1="Fantastic day and night night."
str2 = "Fantastic day and"
Output такой?
Если да, чем тебя не устраивает вариант, который тебе выше привели?
Он, конечно, не не айс алгоритмически, но тебе походу оно и не надо.
0
0 / 0 / 0
Регистрация: 09.05.2020
Сообщений: 49
11.10.2020, 17:49  [ТС]
Та уже устраивает. Вы имеете айс алгоритмический вариант?)
0
Эксперт Python
8849 / 4500 / 1864
Регистрация: 27.03.2020
Сообщений: 7,316
11.10.2020, 17:52
Jordan2323,
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
st = input().rstrip('.')
st1 = ''
temp =''
for i in st :
    if i != ' ' :
        temp += i 
    elif temp not in st1 :
        st1 += temp + ' '
        temp = ''
    else :
        temp = ''
print(st1)
print(st)
2
0 / 0 / 0
Регистрация: 09.05.2020
Сообщений: 49
11.10.2020, 17:53  [ТС]
Какой принцип работы етого цыкла?
Python
1
2
 for i in s.rstrip('.').split():
     if s.count(i) == 1: s2 += ' ' + i
Скажите плз .Спасибо большое!!!!

Добавлено через 1 минуту
Что такое temp?
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
11.10.2020, 17:56
Python
1
2
3
4
5
>>> s = 'Trixie is best pony pony pony.'
>>> s.rstrip('.')
'Trixie is best pony pony pony'
>>> s.rstrip('.').split()
['Trixie', 'is', 'best', 'pony', 'pony', 'pony']
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
11.10.2020, 18:06
Цитата Сообщение от Jordan2323 Посмотреть сообщение
Вы имеете айс алгоритмический вариант?
Самый очевидный для приведенного примера это заменить конкатенацию на список и join - будет работать в три раза быстрее на длинных (>10000 слов ) строках.
Есть также вариант классического дедупликатора, который работает в 150 раз быстрее. Но он оставляет в тексте каждое слово, удаляя только его повторы. А у тебя немного отличается условие: нужно оставить только слова-одиночки.
0
Эксперт Python
8849 / 4500 / 1864
Регистрация: 27.03.2020
Сообщений: 7,316
11.10.2020, 18:35
Упустил про уникальность слов
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
11.10.2020, 18:36
Gdez,
Твой вариант не удовлетворяет условию. Выход: 'Trixie is best pony '. Слова pony по условию быть не должно, так как оно имеет повторы. Или же ТС неверно сформулировал задачу.

-----------------
Вот самый быстрый (в 150 раз быстрее тех, что используют count) вариант исходя из условий:
Python
1
2
3
4
5
6
7
8
def finduniq3(arr, s):
    answ = ""
    
    for w in arr: 
        idx = s.find(w)
        if s.find(w, idx+1) == -1:
            answ += " " + w
    return answ
Python
1
2
s = 'Trixie is best ' +  'pony ' * 100000
arr = s.split()
Вариант с count:
Code
1
2
%timeit  -r 1 -n 1  finduniq2(arr,s)
963 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 1 loop each)
Вариант с find:
Code
1
2
%timeit  -r 1 -n 1  finduniq3(arr,s)
7.33 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 1 loop each)
0
Эксперт Python
8849 / 4500 / 1864
Регистрация: 27.03.2020
Сообщений: 7,316
11.10.2020, 18:40
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
st = input().rstrip('.') + ' '
st1 = ''
st2 = ' '
temp =''
for i in st :
    if i != ' ' :
        temp += i 
    elif temp + ' ' not in st1 + st2 :
        st1 += temp + ' '
        temp = ''
    else :
        st2 += temp + ' '
        st1 = st1.replace(temp + ' ' ,'')
        temp = ''
print(st1.strip())
print(st)
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
11.10.2020, 18:44
Gdez,
Очень медленно. Прям совсем.
0
Эксперт Python
8849 / 4500 / 1864
Регистрация: 27.03.2020
Сообщений: 7,316
11.10.2020, 18:47
Просто хочу ну совсем без списков и только с функциями строки
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
11.10.2020, 20:07
Лучший ответ Сообщение было отмечено Gdez как решение

Решение

Цитата Сообщение от Gdez Посмотреть сообщение
Просто хочу ну совсем без списков и только с функциями строки
Тогда используй find вместо in... Хотя, у тебя же посимвольно все... все равно будет медленно.

Добавлено через 56 минут
Если вместо посимвольного перебора использовать тот же метод find для поиска слов, то будет работать всего лишь в 1.5 раза медленнее варианта с уже готовым списком слов:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
def finduniq33(text):
    answ = ""
    start, end= 0,0 
    while end !=-1 :
        end = text.find(" ", start)   # находим позицию пробела
        if end != -1:
            word = text[start:end]  # выделяем слово
        else:
            word = text[start:]       # выделяем слово
        
        if text.find(word, end + 1) == -1:  # ищем второе вхождение
            answ += " " + word
        start = end + 1
        
    return answ
P.S. В посте выше я немного ошибся: результаты тестов приведены не для
Python
1
s = 'Trixie is best ' +  'pony ' * 100000
а для 10 тыс.
Python
1
s = 'Trixie is best ' +  'pony ' * 10000
На 100 тыс слов вариант с count просто мертвый... работает целую минуту, а с find время выполнения просто линейно растет (в ожидаемые 10 раз).

Добавлено через 6 минут
Отсюда простой вывод: пользуйтесь str.find вместо str.count.

Добавлено через 7 минут
P.P.S. В посте строчку s.find(w, idx+1) правильнее заменить на s.find(word, idx + len(word) + 1)
1
0 / 0 / 0
Регистрация: 09.05.2020
Сообщений: 49
11.10.2020, 20:26  [ТС]
Не запустился Ваш код

Добавлено через 3 минуты
Для чего здесь temp? И объясните как работает Ваш цыкл пожалуйста
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.10.2020, 20:26
Помогаю со студенческими работами здесь

Из строки выбрать те символы, которые встречаются в ней только один раз
Из заданной символьной строки выбрать те символы, которые встречаются в ней только один раз, в том порядке, в котором они встречаются в...

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

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

Создать список в который поместить те символы из my_str, которые встречаются в строке только один раз
Привет всем) Спасибо за помощь Условие : Дана строка my_str. Создать список в который поместить те символы из my_str, которые...

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru