Python,在字符串中查找单词以及该单词中每个字符的位置

时间:2015-02-24 14:12:22

标签: python string

让我们用Python说我有这句话:

my_sentence = "I like to drive my car around the round block twice daily"

我希望找到“' round'在这句话中。我知道我可以使用find, index, rfindrindex这样:

print my_sentence.find('round')
>>>24

我想要做的是找到每个字母的位置' round'在句子中,只使用第一次出现的单词' round'。我希望打印出每一个字母“#round;'在字符串中。我试过这样做(例如,找到最后一个字母并从那里开始):

last_letter = my_sentence.find('round')
last_letter2 = last_letter[-1::]

这会产生错误。那么,获取字符串中每个字母的位置的最佳方法是什么?我是Python的新手,我看到有办法找到一个单词的位置,但不是字符串中单词的每个字母。我该怎么做呢? 括号中的预期输出:

r (location 24) o (25) u (26) n(27) d(28)

2 个答案:

答案 0 :(得分:2)

简单:只需查找单词的第一个匹配项,然后为字母添加偏移量。

>>> my_sentence = "I like to drive my car around the round block twice daily"
>>> word = 'round'
>>> pos = my_sentence.find(word)
>>> [(c, pos + i) for (i, c) in enumerate(word)]
[('r', 24), ('o', 25), ('u', 26), ('n', 27), ('d', 28)]

答案 1 :(得分:2)

编写辅助函数,例如:

def my_find(sentence, what):
    try:
        start = sentence.index(what)
        return [(ch, idx) for idx, ch in enumerate(what, start)]
    except ValueError:
        return []

示例:

>>> my_find("I like to drive my car around the round block twice daily", "round")
[('r', 24), ('o', 25), ('u', 26), ('n', 27), ('d', 28)]
>>> my_find("I like to drive my car around the round block twice daily", "xyz")
[]

注意:这会以合理的方式处理word不在my_sentence的情况 - 其他答案会产生令人惊讶的结果......