lambda函数中匹配括号字符的索引?

Index of matching bracket character within a lambda function?

我很好奇而不是迫切需要。是否可以向 lambda 函数传递两个参数 si。其中 s 是有问题的字符串, i 是第一个括号的索引;并让它 return 免费括号的索引?

我应该注意它只需要为括号 () 工作,而不是 {}[].

例如

>>> f( '(() foo ) bar' , 0)
8

f 由 lambda 函数定义

编辑:我知道有很多方法可以找到匹配的括号。但是,我很好奇它是否可以简化为 lambda 表达式。

我懒得担心极端情况,但使用 itertools.accumulate 它相对简单:

f = lambda s,i: next((i for i,x in enumerate(accumulate
    ({'(': 1, ')': -1}.get(c,0) for c in s[i:]), i) if not x), None)

In [31]: s = '(() foo ) bar'

In [32]: f(s, 0)
Out[32]: 8

In [33]: f(s, 1)
Out[33]: 2

In [34]: f(s, 2)

这通过跟踪字符串的高度来工作,将(作为 +1 和)作为 -1 计算:

In [36]: list(accumulate({'(': 1, ')': -1}.get(c,0) for c in s))
Out[36]: [1, 2, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0]