【问题标题】:Find the index of the end of a word in python在python中查找单词结尾的索引
【发布时间】:2015-12-02 17:54:42
【问题描述】:

有没有一种很好的方法来查找字符串中单词的结束索引?

我的方法是这样的:

text = "fed up of seeing perfect fashion photographs"
word = "fashion"
wordEndIndex = text.index(word) + len(word) - 1

【问题讨论】:

  • 你所拥有的对我来说看起来不错。根据您使用该信息的目的,可能会有更好的方法来实现最终目标。也许发布一些关于你真正想做的事情的更多细节?
  • re.search(word, text).end() 但它可能不会比你的方法快
  • re.search(word, text).end() - 1 给出的答案与wordEndIndex 中的答案相同
  • 使用 regex 速度要慢得多(大约 3.5 倍),所以除非您的情况通过使用正则表达式以其他方式受益,否则最好继续使用您所拥有的

标签: python string indexing find


【解决方案1】:

这取决于你是否真的想要知道结束索引。大概在那之后您实际上对text 的位更感兴趣?那你在做这样的事情吗?

>>> text[wordEndIndex:]
'n photographs'

如果您确实需要索引,则执行您已完成的操作,但将其包装在一个函数中,您可以调用不同的 texts 和 words,这样您就不必重复此代码.如果你给函数起一个描述性的名字,那就简单易懂了。

另一方面,如果您对text 的位更感兴趣,那么甚至不必费心计算索引是什么:

>>> text.split(word)
['fed up of seeing perfect ', ' photographs']

当然,如果单词可以在文本中出现多次,这将变得更加复杂。在这种情况下,也许您可​​以定义一个不同的函数,在单词第一次出现时进行拆分,然后返回之前和之后的组件,而不返回任何数字索引。

【讨论】:

  • 好主意,但你可以使用split() 而不是partition()
【解决方案2】:

我无法评论这是否是更好的方法,但您建议的替代方法是在该单词之后找到下一个空格并使用它来获取索引。

text = "fed up of seeing perfect fashion photographs"
word = "fashion"
temp = text.index(word)
wordEndIndex = temp + text[temp:].index(' ') - 1

您的方法似乎更自然,也可能更快。

【讨论】:

    【解决方案3】:

    只是为了好玩,这里有一个第一原则的版本,它可以在单遍中找到单词最后一个字符的索引:

    def word_end_index(text, word):
        wi = wl = len(word)
        for ti, tc in enumerate(text):
            wi = wi - 1 if tc == word[-wi] else wl
            if not wi:
                return ti
    
        return -1
    

    我有一些较短的版本,但他们使用切片会在整个地方重复字符串,效率相当低。

    【讨论】:

      【解决方案4】:

      我知道我迟到了,但我找到了一个简单的方法。

      sentence = 'fed up of seeing perfect fashion photographs'
      word = "fashion"
      if sentence.find(word) != -1:
          start_index = sentence.find(word)
          last_index = start_index + len(word)
      else:
          print(f"{word} not found in the given sentence")
      

      在start_index中简单添加一个单词的长度

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-20
        • 1970-01-01
        • 2021-08-27
        • 1970-01-01
        • 1970-01-01
        • 2021-10-25
        相关资源
        最近更新 更多