我正试图提出一个列表理解,以匹配打开和关闭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/

10-14 18:32