我试图将lisp输入解析为python列表.但是当我解析输入时,我得到了字符串列表,但我希望将单个元素作为int.
示例:当我解析以下输入时:“(2(10(5 11)))(5 6)(4)”
输出:[[[‘2′],[’10’,’5′]],[[‘5’],[‘6’]],[[‘4’]]]
我使用:[[map(int,x)for x in lst] for lst in test]将字符串转换为int但是这个函数只解析2级的嵌套列表.但是如果我有一个超过2的嵌套列表,我该怎么用它来解析?
我试过pyparsing但我不理解它.
解决方法:
如果你想使用pyparsing,你可以不进行任何后处理,如下所示.
import pyparsing as pp
integer = pp.Word(pp.nums).setParseAction(lambda m:int(m[0]))
expr = pp.Forward()
expr << pp.nestedExpr(content=pp.OneOrMore(integer | expr))
manyExpr = pp.OneOrMore(expr)
print manyExpr.parseString('(2 (10 (5 11))) (5 6) (4)')
#returns [[2, [10, [5, 11]]], [5, 6], [4]]
这首先将整数定义为仅由数字组成的东西,并告诉pyparsing如何将它从一串数字转换为整数对象.接下来,它将表达式定义为括号内的表达式或整数列表.最后,为了解析您的示例,它会查找许多连续的表达式.
标签:pyparsing,python,lisp 来源: https://codeday.me/bug/20190725/1533022.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。