我需要第一个开放括号和最后一个封闭括号的索引...而不使用任何循环。
示例:
string='a(bcdefghijkl(mno)p)q'
答案 0 :(得分:2)
此函数查找第一个开始和最后一个结束括号的索引:
def find_first_last(string, first='(', last=')'):
return (
string.index(first),
len(string) - string[::-1].index(last)
)
print(find_first_last('a(bcdefghijkl(mno)p)q'))
# (1, 20)
通过使用index
字符串方法执行此操作,该方法返回字符串中字符的最低索引。对于右括号,它将字符串反转以找到该字符的最后一次出现。
答案 1 :(得分:1)
使用DynamicValues
和str.find
查找两个字符的索引。使用str.rfind
更容易找到最后一个字符,并且避免了其他方法可能容易出错的错误。还有一个str.rfind
的工作方式与此类似。
您是否更喜欢使用str.rindex
/ str.find
或str.rfind
/ str.index
是您希望如何处理缺少str.rindex
的问题/ first
字符串。如果要例外,请使用last
,如果要在返回的元组中使用-1,请使用index
。
find
输出
def find_first_last(s, first='(', last=')'):
return s.find(first), s.rfind(last)
print(find_first_last('a(bcdefghijkl(mno)p)q'))
# couple of error cases
print(find_first_last('a(bcdefghijkl(mnopq'))
print(find_first_last('abcdefghijklmno)p)q'))
print(find_first_last('abcdefghijklmnopq'))
print(find_first_last('abcdefgh)(ijklmnopq'))