要列出的字符串,python

要列出的字符串,python,python,string,list,Python,String,List,假设我在一个文件中有这样的内容: [[(A,B), (B,C)],[(x,y), (z,v)]] 我希望这是一个python列表。我该怎么做 最后,我希望能够遍历这个数组的行和列,并获得每一对相邻的值来比较它们 从文件中读取行后: import ast parsed_list = ast.literal_eval(line) 从文件中读取行后: import ast parsed_list = ast.literal_eval(line) 纯python s = "[[(A,B), (

假设我在一个文件中有这样的内容:

[[(A,B), (B,C)],[(x,y), (z,v)]]
我希望这是一个python列表。我该怎么做


最后,我希望能够遍历这个数组的行和列,并获得每一对相邻的值来比较它们

从文件中读取行后:

import ast

parsed_list = ast.literal_eval(line)

从文件中读取行后:

import ast

parsed_list = ast.literal_eval(line)
纯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')]]
>>> 
纯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')]]
>>> 

更深奥的方法是:

import yaml
from string import maketrans

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


更深奥的方法是:

import yaml
from string import maketrans

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

这项工作:

>>> 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')]]
如果您确实想要LoLoL而不是LoLoT(如上所述),请执行以下操作:

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']]]
这项工作:

>>> 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')]]
如果您确实想要LoLoL而不是LoLoT(如上所述),请执行以下操作:

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']]]

ast.literal\u eval
取决于
A
B
C
。。。看起来像。你需要这个作为输出:
[[('A','B'),('B','C'),[('x','y'),('z','v')]
?或者你有A、B、C……的值吗?最好避免
eval
。我更喜欢使用解析器(甚至可能是
ast.parse
,或者,正如mgilson建议的那样,
ast.literal\u eval
,如果这些字母代表文字),或者
ast.literal\u eval
,这取决于
a
B
C
。。。看起来像。你需要这个作为输出:
[[('A','B'),('B','C'),[('x','y'),('z','v')]
?或者你有A、B、C……的值吗?最好避免
eval
。我更喜欢使用解析器(甚至可能是
ast.parse
,或者,正如mgilson所建议的那样,
ast.literal\u eval
,如果这些字母代表文字)。