如何将此字符串转换为列表列表?

时间:2010-04-15 09:47:38

标签: python list tuples

如果用户输入[[0,0,0], [0,0,1], [1,1,0]]并按Enter, 程序应该将此字符串转换为多个列表; 一个列表包含[0][0][0],另一个列表包含[0][0][1],最后一个列表包含[1][1][0]

python是否有一个很好的方法来处理它?<​​/ p>

6 个答案:

答案 0 :(得分:22)

>>> import ast
>>> ast.literal_eval('[[0,0,0], [0,0,1], [1,1,0]]')
[[0, 0, 0], [0, 0, 1], [1, 1, 0]]

对于元组

>>> ast.literal_eval('[(0,0,0), (0,0,1), (1,1,0)]')
[(0, 0, 0), (0, 0, 1), (1, 1, 0)]

答案 1 :(得分:20)

>>> import json
>>> json.loads('[[0,0,0], [0,0,1], [1,1,0]]')
[[0, 0, 0], [0, 0, 1], [1, 1, 0]]

答案 2 :(得分:1)

这比Satoru更灵活,并且不使用任何库。但是,它不适用于更深层次的嵌套列表。为此,我认为你需要一个递归函数(或循环)或eval。

str = "[[0,0,0],[0,0,1],[1,1,0]]"
strs = str.replace('[','').split('],')
lists = [map(int, s.replace(']','').split(',')) for s in strs]

列表现在包含您想要的列表列表。

答案 3 :(得分:1)

[[int(i) for i in x.strip(" []").split(",")] for x in s.strip('[]').split("],")]

列表理解中的列表理解... 但这会使你的大脑融化

答案 4 :(得分:0)

>>> import re    
>>> list_strs = re.findall(r'\[\d+\,\d+\,\d+\]', s)
>>> [[[int(i)] for i in l[1:-1].split(',')] for l in list_str]

答案 5 :(得分:-3)

>>> string='[[0,0,0], [0,0,1], [1,1,0]]'
>>> eval(string)
[[0, 0, 0], [0, 0, 1], [1, 1, 0]]
>>> a=eval(string)
>>> a
[[0, 0, 0], [0, 0, 1], [1, 1, 0]]

在将字符串传递给eval()之前,先进行必要的清理。