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不,我想不会的