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

Python lambda函数中匹配括号字符的索引?,python,lambda,brackets,Python,Lambda,Brackets,我更好奇,而不是迫切需要。是否可以将两个参数s和i传递给lambda函数。其中,s是有问题的字符串,i是第一个括号的索引;并让它返回免费括号的索引 我应该注意,它只需要处理括号(),而不需要处理{}或[] 例如 >>> f( '(() foo ) bar' , 0) 8 f由lambda函数定义 编辑:我知道有很多方法可以找到匹配的括号。一、 但是,我很好奇是否可以将其简化为lambda表达式。我懒得担心角落的情况,但使用的是itertools。累加它相对简单: f = la

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

我应该注意,它只需要处理括号
()
,而不需要处理
{}
[]

例如

>>> f( '(() foo ) bar' , 0)
8
f
由lambda函数定义


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

我懒得担心角落的情况,但使用的是
itertools。累加
它相对简单:

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)
这是通过跟踪字符串的高度,将(as+1和)计数为-1:


我懒得去担心角落的情况,但使用
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)
这是通过跟踪字符串的高度,将(as+1和)计数为-1:


它可以。但这不会很好。@juanpa.arrivillaga不,我想不会是这样的。但不会很好。@juanpa.arrivillaga不,我想不会的