2

ファイルに次のようなものがあるとしましょう:

[[(A,B), (B,C)],[(x,y), (z,v)]]

これをリストのpythonリストとして欲しい。それ、どうやったら出来るの?

最後に、この配列の行と列を繰り返し処理し、隣接する値の各ペアを取得して比較できるようにしたいと考えています。

4

4 に答える 4

3

それを行うより難解な方法:

import yaml
from string import maketrans

s = "[[(A,B), (B,C)],[(x,y), (z,v)]]"    
yaml.load(s.translate(maketrans("()", "[]")))

アウト:

[[['A', 'B'], ['B', 'C']], [['x', 'y'], ['z', 'v']]]
于 2013-01-28T20:47:10.230 に答える
1

これは機能します:

>>> import re,ast
>>> st='[[(A,BC), (B,C)],[(x,y), (z,v)]]'
>>> ast.literal_eval(re.sub(r'(\w+)',r"'\1'",st))
[[('A', 'BC'), ('B', 'C')], [('x', 'y'), ('z', 'v')]]

(上記のように) LoLoT ではなく LoLoL が本当に必要な場合は、次のようにします。

def rep(match):
    if match.group(1)=='(': return '['
    if match.group(1)==')': return ']'
    return "'{}'".format(match.group(1))

st='[[(A,B), (B,C)],[(x,y), (z,v)]]'
st=re.sub(r'(\w+|[\(\)])', rep,st)
>>> ast.literal_eval(st)
[[['A', 'B'], ['B', 'C']], [['x', 'y'], ['z', 'v']]]
于 2013-01-28T21:15:00.997 に答える
0

純粋なPython...

s = "[[(A,B), (B,C)],[(x,y), (z,v)]]"

print s

s = filter(None, s[1:-1].replace(",[", "").replace("[", "").replace(" ", "").split(']'))

for i,t in enumerate(s):
    t = filter(None, t.replace(",(", "").replace("(", "").split(')'))
    t = [tuple(x.split(",")) for x in t]
    s[i] = t

print s

出力:

>>> 
[[(A,B), (B,C)],[(x,y), (z,v)]]
[[('A', 'B'), ('B', 'C')], [('x', 'y'), ('z', 'v')]]
>>> 
于 2013-01-28T20:30:12.920 に答える
0

ファイルから行を読み取ったら、次のようにします。

import ast

parsed_list = ast.literal_eval(line)
于 2013-01-28T20:10:19.887 に答える