Поиск исходных положений слов в предложении, когда слово происходит более одного раза

Мне нужно найти позиции слов в предложении, которое вводит пользователь, и если слово происходит более одного раза, только распечатывайте первый раз, когда это слово происходит

У меня есть код до сих пор –

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