我有一个Python字符串:
test = 'blablabla_foo_bar_baz'
我想要_
的第二次出现的负指数from the right:在这种情况下,这将是-8,但即使是正指数13也是一个可以接受的答案,因为从正指数计算负指数并不困难.我怎么能做到这一点?GPT-4解决方案使用rfind
+迭代,但我想知道是否有可能在没有迭代的情况下一次解决它.当然,答案应该处理任意长度的字符串,并且应该匹配任意字符(在本例中为_
).
编辑:我需要_
右边第二次出现的负指数,因为我想go 掉_bar_baz
,这可以很容易地完成
test_prefix = test[:-8]
因此,替代的解决方案,允许我得到test_prefix
,而不是首先从_
的右侧找到第二次出现的负指数,也是可以的.使用子字符串_bar_baz
的长度(在本例中为8)是可以的,因为我不知道此子字符串的长度.相反,计算从_
开始的第二次出现的子字符串的长度,直到字符串的末尾,就可以了.不过,这看起来和计算_
右边第二次出现的负指数没有什么不同.
EDIT2:一位 comments 者说,没有迭代是不可能解决这个问题的.我不确定他们是正确的,但我会展示一个(GPT-4生成的)我don't想要的例子:
def find_second_last_occurrence(text, char='_'):
last_occurrence = text.rfind(char)
second_last_occurrence = text.rfind(char, 0, last_occurrence)
return second_last_occurrence
string = "blablabla_foo_bar_baz"
result = find_second_last_occurrence(string, '_')
print(result) # Output: 20
在这种情况下,我们不得不两次拨打rfind
.这真的有必要吗?我不认为所有可能的解决方案(包括基于re
、rsplit
等的解决方案)都需要调用内置函数两次.我没有在字符串中包括任何判断_
出现的代码,因为我确定我的输入字符串包含至少两个_
出现.