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

Phr*_*xus 8 python tuples list

如果用户键入[[0,0,0], [0,0,1], [1,1,0]]并按Enter键,程序应将此字符串转换为多个列表; 一个列表持有[0][0][0],另一个列表[0][0][1],以及最后一个列表[1][1][0]

python有一个很好的方法来处理这个问题吗?

YOU*_*YOU 23

>>> import ast
>>> ast.literal_eval('[[0,0,0], [0,0,1], [1,1,0]]')
[[0, 0, 0], [0, 0, 1], [1, 1, 0]]
Run Code Online (Sandbox Code Playgroud)

对于元组

>>> ast.literal_eval('[(0,0,0), (0,0,1), (1,1,0)]')
[(0, 0, 0), (0, 0, 1), (1, 1, 0)]
Run Code Online (Sandbox Code Playgroud)

  • 8 年后仍然有意义......:) (3认同)
  • 9年过去了,依然魅力十足。建议在使用之前查看[链接](https://docs.python.org/3/library/ast.html#ast.literal_eval)。 (2认同)
  • 杰出的。完美的。 (2认同)
  • 10 年后,仍然是最好的答案——FAR。 (2认同)
  • 12 年了,好吧,你知道显而易见的事情。 (2认同)

Mar*_*tos 22

>>> import json
>>> json.loads('[[0,0,0], [0,0,1], [1,1,0]]')
[[0, 0, 0], [0, 0, 1], [1, 1, 0]]
Run Code Online (Sandbox Code Playgroud)

  • 请注意,这将表达式解析为JSON,*not*作为Python文字.对于列表,整数和字符串,这大致相同.对于其他类型,如元组,它将无法正常工作. (4认同)

Per*_*man 8

这比 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]
Run Code Online (Sandbox Code Playgroud)

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

  • 我很高兴地承认我的代码很丑陋 - 但没有人提出任何遵循相同约束的更好的方法。也许导入库一般来说是正确的事情,如果失败的话,通用的递归解决方案会更好,但也许你真的不想因为一些晦涩但充分的理由做这两件事。我的代码可能不那么折衷的一种方法是使用嵌套列表理解而不是映射......除此之外,是否有一种基本上更好的快速而肮脏的方法来做到这一点? (2认同)