繁体   English   中英

在Python中查找字符串中多个字符的最后一次出现

[英]find last occurence of multiple characters in a string in Python

我想在字符串中找到最后一次出现的字符数。

str.rfind()将给出字符串中单个字符最后一次出现的索引,但我需要最后一次出现多个字符的索引。 例如,如果我有一个字符串:

test_string = '([2+2])-[3+4])'

我想要一个函数,它返回{,[,或{的相似的最后一次出现的索引

test_string.rfind('(', '[', '{')

理想情况下会返回8.最好的方法是什么?

max(test_string.rfind('('), test_string.rfind('['), test_string.rfind('{'))

看起来很笨重而不是Pythonic。

您可以使用生成器表达式以Pythonic方式执行此操作。

max(test_string.rfind(i) for i in "([{")

这将迭代您要检查的字符列表/元组,并对它们使用rfind() ,将这些值组合在一起,然后返回最大值。

这非常简洁,并且可以解决问题。

max(map(test_string.rfind, '([{'))

你可以使用reverse来获得第一个匹配的字符串的结尾,使用字符串-1的长度 - 索引i来获取从开始计数的索引,最坏的情况是在字符串上进行一次传递:

test_string = '([2+2])-[3+4])'
st = {"[", "(", "{"}
print(next((len(test_string) - 1 - i 
            for i, s in enumerate(reversed(test_string)) if s in st),-1))
8 

如果没有匹配项,您将获得-1作为默认值。 如果你要搜索大量的子字符串比为你想要匹配的每个子字符串做一个O(n) rfind然后获得所有这些的最大值,这会更有效率

>>> def last_of_many(string, findees):
...     return max(string.rfind(s) for s in findees)
... 
>>> test_string = '([2+2])-[3+4])'
>>> last_of_many(test_string, '([{')
8
>>> last_of_many(test_string, ['+4', '+2'])
10
>>> 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM