当单词出现不止一次时,查找句子中单词的原始位置

时间:2016-07-05 17:10:28

标签: python

我需要在用户输入的句子中找到单词的位置,如果单词出现不止一次,则只在第一次出现单词时打印

到目前为止我有代码 -

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)

但它打印句子中单个单词的位置,而不是重复出现不止一次的单词的原始位置

任何人都可以帮我这个???

3 个答案:

答案 0 :(得分:2)

如果你使用的是python 2,那么raw_input而不是input,否则它将得到评估。这不是问题,只是一个观察(你可能正在使用python 3,所以我会这样离开)。

您可以创建一个字典来跟踪找到的字数和位置。这基本上是一个列表的字典。该词典是一个词语地图列表。

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)

基本上使用所有非字母数字(逗号,冒号等)作为分割。请注意,你可以通过这种方式获得一个空白条目(可能在最后)。

答案 1 :(得分:1)

您的代码需要进行一些修改才能实现您的目标:

  • if words.count(a)>2:它应该是if words.count(a)>1,因为如果重复该单词,则计数将大于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]

答案 2 :(得分:0)

拆分字符串

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