在Python中解析令牌列表
目标:我有一个令牌列表。每当有一段由括号包围的令牌时,例如{t1,t2等},我需要将它变成一个新的子列表。下面提供了一个我期望的结果的例子。在Python中解析令牌列表
解析:[ '(事实上)', 'DUP', '长度', '/ N', 'EXCH', 'DEF', '/事实', '{', '0', '''','','','','','','''''',' n','1','sub','fact','n','mul','}','ifelse','end','}','def','n','fact' ,'stack'])
返回: ['(facto)','dup','length','/ n','exch','def','/ fact',[0,' dict','begin','/ n','exch','def','n',2,'lt',[1],['n',1,'sub','fact',' n','mul'],'ifelse','end'],'def','n','fact','stack']
这是到目前为止我的代码:
def parse1(L): newL = []
for x in L:
if x == '}':
return newL
elif x == '{':
newL.append(parse1(L[1:]))
else:
newL.append(x)
return newL
它的工作原理,以至于每当发生{我关禁传列表的其余部分进入功能再次,用时基本情况是发生}。这是行得通的,但是一旦它退出递归并创建一个子列表,它正在迭代的元素“x”还没有超过这个部分。例如,如果我们的列表是:['{','1','}'],结果应该简单地为[[1]]。然而,发生的事情是返回[[1],'1'],因为一旦它创建了子列表(似乎工作正常),循环正在经历的下一个元素“x”实际上是该子列表的一个元素,它是紧跟在'{'之后的元素,根据我的代码,它被添加到列表中。
我觉得这是一个非常简单的解决方法,但我花了很长时间试图弄清楚。正如我已经解释的那样,我理解这些问题,但不能在我的生活中弄清楚如何解决它。任何帮助将不胜感激!
回答:
这一个解决方案是仿照你的尝试(兼营整数):
# This assumes brackets are properly balanced def parse1(L):
newL = []
i = 0
while i<len(L):
x = L[i]
if x == '}':
# Return the parsed list & the unparsed portion of the original list
print(newL, L[i:])
return newL, L[i+1:]
elif x == '{':
# Split rest of L into parsed & unparsed portions
parsed, unparsed = parse1(L[i+1:])
# Insert parsed portion into current list
newL.append(parsed)
# Reset i & L for unparsed portion
i, L = 0, unparsed
else:
# Convert x to an integer if possible
try:
x = int(x)
except:
pass
newL.append(x)
i += 1
return newL
以上是 在Python中解析令牌列表 的全部内容, 来源链接: utcz.com/qa/257233.html