如何让 python 在列表和返回位置中重新识别相同的字符串

How to get python to recongise same strings in list and return position

提问人:D. Forrester 提问时间:2/18/2017 更新时间:2/18/2017 访问量:54

问:

我有一个句子单词,当该句子中的某个单词被输入为一种“查找此单词”功能时,程序会识别该单词在句子中出现的所有位置并返回结果

如果句子是:

I wish upon a star and the star wishes upon me

我想找到这个词,结果将是

the word "upon" is in position: 1 and 9

该句子不区分大小写,因此 Upon 和 UpoN 的处理方式相同。此外,该句子将由用户输入。

关于如何编码的任何想法?

python 数组 字符串 列表 返回

评论

0赞 greedy52 2/18/2017
也许而不是?到目前为止,你尝试了什么?如果关键字出现两次以上,您如何显示输出?2 and 91 and 9
0赞 Matthias 2/18/2017
下面是此任务的函数:。现在去向你的老师解释一下。find_word = lambda sentence, needle: [index for index, word in enumerate(map(str.lower, sentence.split())) if word == needle.lower()]
0赞 D. Forrester 2/18/2017
@XinHuang,如果关键字出现两次以上,它应该只是打印出位置,所以如果我有一个 1000 字的句子并且关键字出现不止一次,它将返回单词的位置该单词出现多少次。我也尝试使用“list.index”,但是当关键字多次出现时,它不会正确返回该词。有什么想法吗?
0赞 greedy52 2/18/2017
@D.Forrester,list.index 仅返回第一个匹配项。
0赞 Matthias 2/18/2017
我发布的代码有效,但显然您的 Python 知识仍处于初学者水平。你知道如何将字符串拆分为不同的单词吗?如果没有,请阅读字符串类型的文档,您将找到一种方法。

答:

0赞 greedy52 2/18/2017 #1

一种方法是列表。根据关键字检查值,然后保留索引。enumerate

import re

def find_dup(sentence, keyword):
    keyword = keyword.lower()
    words = re.sub('[^\w]', ' ', sentence.lower()).split()
    return [index for index, value in enumerate(words) if value == keyword]

sentence = 'I wish upon a star and the star wishes upon me. Upon capital.'
keyword = 'upon'
positions = find_dup(sentence, keyword)
print positions
print 'the word "{}" is in position: {}'.format(keyword, ' '.join([str(p) for p in positions]))

输出:

[2, 9, 11]
the word "upon" is in position: 2 9 11