查找列表中给出的匹配的圆括号对

时间:2019-06-20 14:25:20

标签: python list tuples

我有一个看起来像这样的元组列表:

[(' ( ', 0),
 (' ) ', 4),
 (' ( ', 5),
 (' ( ', 6),
 (' ) ', 10),
 (' ) ', 11)]

我需要获取如下所示的列表:

[(​ 0 ​ , ​ 4 ​ ), (​ 5 ​ , ​ 11​ ), (​ 6 ​ , ​ 10​ )]

主要任务是在给定的元组列表中找到所有成对的圆括号(括号)。 串。

1 个答案:

答案 0 :(得分:2)

配对括号的惯用方式是使用堆栈数据结构。

每当您看到一个尖括号时,便将该值压入堆栈,每当您看到一个尖括号时,便从堆栈中弹出一个值以进行匹配:

brackets = [(' ( ', 0), (' ) ', 4), (' ( ', 5), (' ( ', 6), (' ) ', 10), (' ) ', 11)]

stack = []
solution = []
for bracket, num in brackets:
    if '(' in bracket:
        stack.append((bracket, num))
    elif ')' in bracket:
        solution.append((stack.pop()[1], num))

print(solution)

由于堆栈和方括号的 LIFO (后进先出)性质,此方法有效。

含义-右方括号应将遇到的最后个左方括号括起来。