如何将嵌套列表的字符串表示形式转换为嵌套列表?

How I Convert a string representation of a nested list into a nested list?

我有一个表示嵌套列表的字符串: string = [[1,2,3],[4,5,6]]

A 想将其转换为列表: list = [[1, 2, 3], [4, 5, 6]]

我试过使用 string.split("]'[").split(', ') 但它仍然返回 [ ['1,2,3],[4,5,6'] ]

有什么帮助吗?谢谢!

假设你有一个像 string = "[[1,2,3],[4,5,6]]" 这样的字符串,你想把它转换成像 lst = [[1,2,3],[4,5,6]] 这样的列表对象,你可以简单地使用 eval 方法:
lst = eval(string)

如果你使用外部库没有问题,你可以使用pyyaml来实现:

>>> from yaml import CLoader as Loader, CDumper as Dumper
>>> import yaml
>>> string = "[[1,2,3],[4,5,6]]"
>>> yaml.load(string, Loader=Loader)
[[1, 2, 3], [4, 5, 6]]

如果我正确理解你的问题,你需要 eval() 内置。从python 3.9开始,最好用ast.literal_eval(node_or_string),更安全:

from ast import literal_eval

a_str = '[[1,2,3],[4,5,6]]'
b_list = eval(a_str)
print(b_list)
# from python 3.9 better to use this, instead of eval():
c_list = literal_eval(a_str)
print(c_list)

阅读:

https://docs.python.org/3/library/ast.html#ast.literal_eval https://docs.python.org/3/library/functions.html#eval

ast.literal_eval(string) 就是您要找的。在这种情况下,最终看起来像

from ast import literal_eval

string = "[[1,2,3],[4,5,6]]"
list = literal_eval(string)
print(list)

使用 python 中的 eval 被认为是危险的,特别是如果它的输入是在代码之外完成的。这是一个安全的替代方案,仍然可以满足您的需求。

您的第一种方法存在一些问题(如果您不想被训斥,请忽略这部分)。首先,您的变量 string 似乎实际上已经是一个列表而不是字符串。我会假设这是一个错字,你的意思是 string = "[[1,2,3],[4,5,6]]" 而不是。

str.split(sep) 采用将用作分隔符的字符串,因此 str.split("]'[") 将尝试拆分确切的字符串 "]'[",您似乎希望它拆分在这些字符中的任何一个上。结果是您得到一个包含单个字符串的列表,["[[1,2,3],[4,5,6]]"].