Python 查找子字符串的第一个和最后一个索引的快速方法

Python 查找子字符串的第一个和最后一个索引的快速方法,python,string,indexing,Python,String,Indexing,是否有一个函数可以自动查找字符串的第一个和最后一个索引?我想在不压缩两个索引的情况下查找一次 下面的代码在字符串“txt”中查找单词“best”的第一个索引和最后一个索引,但是,它是单独查找的 >>> _txt='my best friend' >>> _str='best' >>> _txt.find(_str) # first index 3 >>> _txt.find(_str[-1]) # last index

是否有一个函数可以自动查找字符串的第一个和最后一个索引?我想在不压缩两个索引的情况下查找一次

下面的代码在字符串“txt”中查找单词“best”的第一个索引和最后一个索引,但是,它是单独查找的

>>> _txt='my best friend'
>>> _str='best'

>>> _txt.find(_str)  # first index
3

>>> _txt.find(_str[-1]) # last index 
6

#Attempt on joining 
1) >>>_txt.find(_str),(_str[-1])
(3, 't')
尝试的输出错误

理想输出:

(3,6)

有什么建议吗?

如果只有一个匹配项,则可以执行以下操作:

start = _txt.find(_str)
end = start + len(_str) - 1
或者,如果存在多个匹配项,则可以使用
re.finditer

matches = [(m.start(0), m.end(0) - 1) for m in re.finditer(_str, _txt)]
试试这个:

_str ='My best friend.'
getIndexes = lambda x: (_str.find(x[:-len(x)+1]),_str.find(x[len(x)-1:]))
print getIndexes('best')

使用lambda函数并在本地检索子字符串的索引是最“快”的。

我想你想做的是
\u txt.find(\u str),\u txt.find(\u str[-1])
,为什么不定义一个包含两个参数的函数或lambda呢?如果输入是
最好的朋友
\u txt.find(\u str[-1])
不会做您认为它会做的事情。它在
\u txt
中查找
\u str
最后一个字符的第一个索引;如果
\u txt
'aabb'
\u str
'abb'
,这将给出2,而不是3。@EdChum,thefoutheye刚刚提出了一个非常重要的观察结果。如果输入是“最好的朋友”,您的建议将不起作用。您可以使用正则表达式:尝试我得到的链接[(4,8)],而不是[(4,7)]。末端工作不正常。您刚刚得到(0,len-1)。这不是问题,还是错的;你只是在搜索“模式”的第一个和最后一个字符,而不是全部。“我最好的朋友”给出的是(3,7)而不是(9,12)。“我最好的朋友”给出了(4,3)。如果简化索引,原因可能会更清楚:
x[:-len(x)+1]
只是
s[0]
x[len(x)-1://code>只是
x[-1]
。也许你想要
x[:-1]
x[1://code>,但那还是会被打破的——“我最好的朋友”会给你(3,10)。即使这确实有效,我很确定另一个答案,包括一个线性搜索和一些简单的算法,会比一个包含两个线性搜索和字符串操作的解决方案快很多。更重要的是,它的代码更容易阅读。我完全理解“tbes”的问题。非常感谢你!