3

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 のネストされたリストのみを解析します。

pyparsing してみましたが、よくわかりませんでした。

4

2 に答える 2

3

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 に指示します。次に、括弧内の式または整数のリストとして式を定義します。最後に、例を解析するために、多くの連続した式を探します。

于 2013-09-23T21:35:27.310 に答える