如果用户输入[[0,0,0], [0,0,1], [1,1,0]]
并按Enter,
程序应该将此字符串转换为多个列表;
一个列表包含[0][0][0]
,另一个列表包含[0][0][1]
,最后一个列表包含[1][1][0]
python是否有一个很好的方法来处理它?</ p>
答案 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()
之前,先进行必要的清理。