【发布时间】:2017-11-25 23:37:27
【问题描述】:
目标:我有一个令牌列表。每当有一段被方括号包围的标记时,例如 {t1,t2,etc.},我需要将其放入一个新的子列表中。下面提供了我想要的结果的示例。
解析:['(facto)', 'dup', 'length', '/n', 'exch', 'def', '/fact', '{', '0', 'dict', '开始','/n','exch','def','n','2','lt','{','1','}','{','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”实际上是该子列表的一个元素,它是'{'之后的元素,根据我的代码,它会被附加到列表中。
我觉得这是一个非常容易解决的问题,但我花了很长时间试图弄清楚它。正如我已经解释的那样,我理解这些问题,但我一生都无法弄清楚如何解决它。任何帮助将不胜感激!
【问题讨论】:
-
这不是一个简单的解决方案;您将处理子列表与处理列表的其余部分混为一谈。
-
我正在考虑尝试在不使用内置 for 循环迭代器的情况下重新执行此操作,并尝试手动遍历 L[0]、L[1] 等列表,然后尝试在我处理完子列表后找到更改索引的方法。在这一点上,我已经筋疲力尽了,我已经花了一段时间了。
-
您的预期输出似乎期望将整数字符串转换为整数,但您的代码甚至没有尝试这样做。
-
更改索引(如果您使用的是 while 循环)就像分配一个整数一样简单。
-
@ScottHunter 是的,我在整数方面也遇到了一些问题。但现在我只是想在担心格式化之前让列表正确形成。我尝试了一些检查以确定是 x.isdigit,如果它是真的,我尝试了 newL.append(int(x)),但这似乎不起作用。我也在努力解决这个问题。
标签: python algorithm python-3.x character token