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

Python 如何将此字符串转换为列表列表?,python,list,tuples,Python,List,Tuples,如果用户键入[[0,0,0],[0,0,1],[1,1,0]]并按enter键, 程序应将该字符串转换为多个列表; 一个列表包含[0][0][0],另一个列表包含[0][0][1],最后一个列表包含[1][1][0] python有处理这个问题的好方法吗 >>> import json >>> json.loads('[[0,0,0], [0,0,1], [1,1,0]]') [[0, 0, 0], [0, 0, 1], [1, 1, 0]] 在将字符串传递

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

python有处理这个问题的好方法吗

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

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

这比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]
列表现在包含所需列表的列表

>>> 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)]
[[int(i)表示x.strip中的i(“[]”)。拆分(“,”)表示s.strip中的x(“[]”)。拆分(“],”)

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

不清楚你想做什么。您是否使用
raw\u input()
或类似的方法获取字符串形式的输入?raw\u input。很抱歉我忘了提到这一点,Personman的答案是最简单的解决方案,我可以在python级别立即理解。不过,也要感谢所有其他专业python用户阅读各种不同的、有创意的答案非常有趣!你们太棒了!如果不解释eval()如何执行完全任意的Python代码,请不要建议使用eval()。用户只需输入“exit()”。请注意,这会将表达式解析为JSON,而不是Python文本。对于列表、整数和字符串,这基本相同。对于其他类型,如元组,它将不起作用。这只是Python2.6+没有外部modules@Thomas你是同一个托马斯·沃特斯吗,他向谷歌解释Python的内部结构?谢谢!这是我在python级别能够立即理解的最简单的解决方案。也要感谢其他python用户!:D@Prixius,这是这个解决方案得不到选票的原因。这很容易是最丑陋和最反常的解决方案。我投票支持@S.Mark的解决方案。@Marcelo Cantos,谢谢你的建议。如果Pro Python用户看到这一点,可能会认为这是一个糟糕的解决方案。然而,他的解决方案只适用于我的程序,而且很容易向其他人解释。:)最重要的是,我不知道ast或json是什么。。。我想知道不进口东西是否可能。。但是,再次感谢你的建议。如果有一天我能更深入地理解python,我也会看看你的答案!这一切都很好,但你是在奖励拙劣的设计并自己采用它。这既不是生成好代码的好方法,也不是学习新语言的好方法。最好只是听从那些知道自己在说什么的人的指导,让他们稍后理解。加油!滚开!此外,不难理解:
importast;帮助(ast.literal\u eval)
。我很乐意承认我的代码很难看——但没有人提出过遵循相同约束的更好的建议。也许导入库通常是正确的做法,如果不能做到这一点,则最好使用通用的递归解决方案,但也许出于某种模糊但很好的原因,您真的不想做这两件事。我的代码可以少一点折衷的一种方法是使用嵌套列表理解而不是映射。。。除此之外,有没有一种更快捷、更肮脏的方法呢?8年后,它仍然适用于……)9年后,它仍然像一个魅力。建议使用前先看一眼。太棒了。完美。10年后,至今仍是最好的答案。
>>> 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)]