目标:我有一个令牌列表。每当有一段标记被方括号包围时,比如{t1,t2,etc.},我就需要把它变成一个新的子列表。下面是我期望的结果的一个例子。在
解析:['(fact)'、'dup'、'length'、'/n'、'exch'、'def'、'/fact'、'{'、'0'、'dict'、'begin'、'/n'、'def'、'n'、'2'、'lt'、'{'、'1'、'sub'、'n'、'mul'、'}'、'ifelse'、'end'、'}'、'def'、'n'、'fact'、'stack')
退货: ['(fact)','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”实际上是该子列表的一个元素,它是位于{'后面的元素,根据我的代码,它会被附加到列表中。在
我觉得这是一个很容易解决的问题,但我花了很长时间试图弄清楚。正如我已经解释过的,我理解这些问题,但我一辈子都无法找到解决问题的办法。任何帮助将不胜感激!在
这是在您尝试解决方案的基础上建立的(同时也处理整数):
相关问题 更多 >
编程相关推荐