我正试图提出一个列表理解,以匹配打开和关闭parens。到目前为止,我有这两个语句分别获取打开和关闭parens的两个列表
my_str = "hanz(and(franz/bob())+ 7) + tom(2)"
抓取开放式IDX:
[ i for i,c in enumerate(my_str) if c == '(']
# [4, 8, 18, 31]
抓紧封闭IDX:
[ i for i,c in enumerate(my_str) if c == ')']
# [19, 20, 24, 33]
我想要的是一种方便的理解方法,可以给我一张与每个配对配对配对对应的配对列表
即
[ ???? for i,c in enumerate(my_str) ???]
# [(4,24), (8,20), (18,19), (31,33)]
最佳答案
就像@Tordek提到的那样,尽管这不是不可能,但它不是很实际,
为了完整起见,下面是一个解决方案:
my_str = "hanz(and(franz/bob())+ 7) + tom(2)"
pt_arr = [ 1 if c == '(' else -1 for i,c in enumerate(my_str ) if c == ')' or c == '(']
idx_arr = [ i for i,c in enumerate(my_str ) if c == ')' or c == '(']
[(idx_arr[strt_idx],idx_arr[strt_idx + [j for j,d in enumerate([ sum(pt_arr[strt_idx:i + 1]) for i,c in enumerate(pt_arr) if i >= strt_idx]) if d == 0][0]]) for strt_idx,f in enumerate(pt_arr) if f == 1]
# [(4,24), (8,20), (18,19), (31,33)]
关于python - 列出理解以找到匹配的括号,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53311626/