将格式化字符串转换为二维数组

时间:2021-02-07 04:43:47

标签: python arrays string

我有一个像这样的二维数组格式的字符串:

"[[1, 0, 0, 0], [1, 0, 0, 0], [1, 0, 0, 0], [1, 0, 0, 0]]"

我怎样才能让程序将字符串作为这样的实际二维数组读取

[[1, 0, 0, 0], [1, 0, 0, 0], [1, 0, 0, 0], [1, 0, 0, 0]]

以便我可以执行矩阵计算?

我尝试删除逗号和括号,然后将字符串数字转换为整数,但这不起作用,因为我需要保持二维数组的形状。在这个例子中,我需要最终的 2D 数组的大小为 [4][4]

2 个答案:

答案 0 :(得分:3)

鉴于 2D 列表字符串恰好是 Python 2D 列表的有效语法,您可以使用 eval() 函数:

output = eval("[[1, 0, 0, 0], [1, 0, 0, 0], [1, 0, 0, 0], [1, 0, 0, 0]]")
print(output)
print(output[0])

打印:

[[1, 0, 0, 0], [1, 0, 0, 0], [1, 0, 0, 0], [1, 0, 0, 0]]
[1, 0, 0, 0]

答案 1 :(得分:2)

In [4]: import ast                                                                                                                                                              

In [5]: array = "[[1, 0, 0, 0], [1, 0, 0, 0], [1, 0, 0, 0], [1, 0, 0, 0]]"                                                                                                      

In [6]: array = ast.literal_eval(array)                                                                                                                                         

In [7]: array                                                                                                                                                                   
Out[7]: [[1, 0, 0, 0], [1, 0, 0, 0], [1, 0, 0, 0], [1, 0, 0, 0]]

<块引用>

ast.literal_eval(node_or_string)[Python-doc]安全地计算表达式节点或 包含以下 Python 文字 :: 字符串、字节、 数字、元组、列表、字典、集合、布尔值和无。

相关问题