我有一个看起来像这样的元组列表:
[(' ( ', 0),
(' ) ', 4),
(' ( ', 5),
(' ( ', 6),
(' ) ', 10),
(' ) ', 11)]
我需要获取如下所示的列表:
[( 0 , 4 ), ( 5 , 11 ), ( 6 , 10 )]
主要任务是在给定的元组列表中找到所有成对的圆括号(括号)。 串。
答案 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 (后进先出)性质,此方法有效。
含义-右方括号应将遇到的最后个左方括号括起来。