Поиск исходных положений слов в предложении, когда слово происходит более одного раза
Мне нужно найти позиции слов в предложении, которое вводит пользователь, и если слово происходит более одного раза, только распечатывайте первый раз, когда это слово происходит
У меня есть код до сих пор –
sentence=input("Enter a sentence: ") sentence=sentence.lower() words=sentence.split() place=[] for c,a in enumerate(words): if words.count(a)>2 : place.append(words.index(a+1)) else: place.append(c+1) print(sentence) print(place)
Но он печатает позиции отдельных слов в предложении, а не повторяет исходное положение слова, которое происходит более одного раза
Кто-нибудь может мне с этим помочь???
- python email.parser: извлечение заголовка из электронной почты
- Элегантный и короткий (питонический) способ найти наименьшее неиспользованное число
- Итерирование по списку имен и использование значений min / max для создания нового списка
- python dict setdefault, смущенный
- Список строк python для списка ast.listeral_eval
Если вы используете python 2, тогда raw_input
вместо input
else будет eval. Это не проблема, просто наблюдение (вы, вероятно, используете python 3, поэтому я оставлю это так).
Вы можете создать dict, чтобы отслеживать количество слов и найденные позиции. Это в основном диктофон списков. Дик – это карта слов в список позиций.
sentence=input("Enter a sentence: ") sentence=sentence.lower() words=sentence.split() place={} for pos, word in enumerate(words): try: place[word].append(pos) except KeyError: place[word] = [pos] print(sentence) print(place)
Кроме того, если вы хотите сделать что-то более продвинутое с вашим анализом предложений, вы можете сделать следующее:
import re words = re.split('\W+',sentence)
В основном использует все nonalphanumerics (запятые, двоеточия и т. Д.) Как раскол. Просто обратите внимание, что вы можете получить пустую запись таким образом (вероятно, в конце).
Ваш код нуждается в некоторых модификациях для достижения того, что вы пытаетесь сделать:
-
if words.count(a)>2
: Должно быть,if words.count(a)>1
поскольку count будет больше 1, если слово повторяется. -
place.append(words.index(a+1))
: Это должно бытьplace.append(words.index(a)+1)
так как вы хотите найти индекс a, а затем добавить 1 к нему.
Измененный код основан на предложениях:
sentence=input("Enter a sentence: ") sentence=sentence.lower() words=sentence.split() place=[] for c,a in enumerate(words): if words.count(a)>1 : place.append(words.index(a)+1) else: place.append(c+1) print(sentence) print(place)
Вывод:
Enter a sentence: "hello world hello people hello everyone" hello world hello people hello everyone [1, 2, 1, 4, 1, 6]
Разделить строку
>>> s = '''and but far and so la ti but''' >>> s = s.split() >>> s ['and', 'but', 'far', 'and', 'so', 'la', 'ti', 'but']
используйте set
чтобы найти уникальные слова, и используйте метод list.index
чтобы найти первую позицию каждого уникального слова.
>>> map(s.index, set(s)) [0, 5, 2, 1, 4, 6]
zip
результат этого с уникальными словами, чтобы связать слово с его положением.
>>> zip(set(s),map(s.index, set(s))) [('and', 0), ('la', 5), ('far', 2), ('but', 1), ('so', 4), ('ti', 6)] >>>
Я полагаю, что понимание списка может быть проще читать;
>>> s = '''and but far and so la ti but''' >>> s = s.split() >>> result = [(word, s.index(word)) for word in set(s)] >>> result [('and', 0), ('la', 5), ('far', 2), ('but', 1), ('so', 4), ('ti', 6)] >>>
Сортировать по позиции
>>> import operator >>> position = operator.itemgetter(1) >>> result.sort(key = position) >>> result [('and', 0), ('but', 1), ('far', 2), ('so', 4), ('la', 5), ('ti', 6)] >>>
- map – конвертировать вложенный цикл для сопоставления эквивалента
- как закрыть трассировку 32 приложения через команду cmm?
- Как я могу разделить строку в Python после определенного количества символов?
- Есть ли REPL для Python для Google App Engine?
- Печать многострочных строк бок о бок
- «BadRequestError: позиция курсора выходит за пределы исходного запроса» при получении следующей партии запроса
- Более простой способ связывания методов в Python?
- Ошибка синтаксиса Python
- Виртуальная виртуальная машина Google – установка openCV
- Swap-список / строка вокруг символа python
- OAuth2Decorator хранит пользовательские учетные данные и обновляет токены?