Answers:
您可以使用rfind()
或Python2链接:rindex()
rfind()
rindex()
>>> s = 'Hello StackOverflow Hi everybody'
>>> print( s.rfind('H') )
20
>>> print( s.rindex('H') )
20
>>> print( s.rfind('other') )
-1
>>> print( s.rindex('other') )
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: substring not found
区别在于未找到子字符串时rfind()
返回,-1
而rindex()
引发异常ValueError
(Python2链接:)ValueError
。
如果您不想检查rfind()
返回码-1
,则可能会希望rindex()
提供一个可理解的错误消息。否则,您可能会搜索分钟,其中意外值-1
来自您的代码...
>>> txt = '''first line
... second line
... third line'''
>>> txt.rfind('\n')
22
>>> txt.rindex('\n')
22
该more_itertools
库提供了用于查找所有字符或所有子字符串的索引的工具。
给定
import more_itertools as mit
s = "hello"
pred = lambda x: x == "l"
码
性格
现在有rlocate
可用的工具:
next(mit.rlocate(s, pred))
# 3
补充工具是locate
:
list(mit.locate(s, pred))[-1]
# 3
mit.last(mit.locate(s, pred))
# 3
子串
还有一个window_size
参数可用于查找多个项目的前导项目:
s = "How much wood would a woodchuck chuck if a woodchuck could chuck wood?"
substring = "chuck"
pred = lambda *args: args == tuple(substring)
next(mit.rlocate(s, pred=pred, window_size=len(substring)))
# 59
尚未尝试恢复无效的帖子,但是由于尚未发布...
(这是我在发现此问题之前的做法)
s = "hello"
target = "l"
last_pos = len(s) - 1 - s[::-1].index(target)
说明:当您搜索最后一个匹配项时,实际上是在搜索反向字符串中的第一个匹配项。知道了这一点,我做了s[::-1]
(返回一个反向字符串),然后target
从那里索引了。然后我这样做len(s) - 1 - the index found
是因为我们希望索引不被反转(即原始)字符串中建立。
不过要当心!如果target
超过一个字符,则可能无法在反向字符串中找到它。要解决此问题,请使用last_pos = len(s) - 1 - s[::-1].index(target[::-1])
,它会搜索的反向版本target
。
您可以使用rindex()
函数获取字符串中字符的最后一次出现
s="hellloooloo"
b='l'
print(s.rindex(b))
str
作变量名。人们在python中应该避免的另一个变量名称是abc
;abc
在本地API中有一个称为的模块