如何将嵌套列表的字符串表示形式转换为嵌套列表?
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]]"]
.
我有一个表示嵌套列表的字符串:
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]]"]
.