我需要在用户输入的句子中找到单词的位置,如果单词出现不止一次,则只在第一次出现单词时打印
到目前为止我有代码 -
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)
但它打印句子中单个单词的位置,而不是重复出现不止一次的单词的原始位置
任何人都可以帮我这个???
答案 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)]
>>>