Python 3.x 如何将字符串中的列表转换为Python中的真实列表? 例如。:

Python 3.x 如何将字符串中的列表转换为Python中的真实列表? 例如。:,python-3.x,Python 3.x,发件人: [1,2,3]至[1,2,3] 由于int函数生成了一个5a5,json和ast包可以像这样帮助解析。在这种情况下,请尝试: import json foo = json.loads("[1,2,3]") 或 @Sid在评论中提出了一个重要问题: 为什么不使用eval,因为它是烘焙的,不需要导入 虽然从技术上讲,这是正确的: foo = eval("[1,2,3]") 在这种情况下也会产生预期的结果,@AndyLester重要地提醒我们eva

发件人: [1,2,3]至[1,2,3]

由于int函数生成了一个5a5

,json和ast包可以像这样帮助解析。在这种情况下,请尝试:

import json
foo = json.loads("[1,2,3]")

@Sid在评论中提出了一个重要问题:

为什么不使用eval,因为它是烘焙的,不需要导入

虽然从技术上讲,这是正确的:

foo = eval("[1,2,3]")
在这种情况下也会产生预期的结果,@AndyLester重要地提醒我们eval可能是危险的。具体来说,eval允许执行代码,而不仅仅是解析文本。如果我们设想以下内容可能是python的任意块,有人可能会用它污染我们的输入:

"print('Here be Dragons')"
然后前两个方法将抛出异常:

foo = json.loads("print('Here be Dragons')")
>>>json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

而第三个呢

foo = eval("print('Here be Dragons')")
>>>Here be Dragons
我们的输入执行起来很危险,而不是简单地解析,更糟糕的是,foo仍然没有,因为print没有返回值。

json和ast包可以像这样帮助解析。在这种情况下,请尝试:

import json
foo = json.loads("[1,2,3]")

@Sid在评论中提出了一个重要问题:

为什么不使用eval,因为它是烘焙的,不需要导入

虽然从技术上讲,这是正确的:

foo = eval("[1,2,3]")
在这种情况下也会产生预期的结果,@AndyLester重要地提醒我们eval可能是危险的。具体来说,eval允许执行代码,而不仅仅是解析文本。如果我们设想以下内容可能是python的任意块,有人可能会用它污染我们的输入:

"print('Here be Dragons')"
然后前两个方法将抛出异常:

foo = json.loads("print('Here be Dragons')")
>>>json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

而第三个呢

foo = eval("print('Here be Dragons')")
>>>Here be Dragons

我们的输入执行起来很危险,而不是简单地解析,更糟糕的是,foo仍然是None,因为print没有返回值。

这将正确解析您的列表

k = '[1,2,3]'
list(map(lambda x: int(x), k[1:-1].split(',')))
收益率:

[1, 2, 3]

这将正确解析您的列表

k = '[1,2,3]'
list(map(lambda x: int(x), k[1:-1].split(',')))
收益率:

[1, 2, 3]

简单的eval还不够吗?eval肯定会更危险。@AndyLester how?@Sid除非您完全确定输入是安全的,否则eval将允许执行而不仅仅是解析。试试evalprint“这里是龙”。@Sid这一直是我关于eval如何危险的示例。简单的eval还不够吗?eval肯定会更危险。@AndyLester how?@Sid除非您完全确定输入是安全的,否则eval将允许执行而不仅仅是解析。试试evalprint“这里是龙”。@Sid这一直是我关于eval如何危险的示例。伟大的字符串答案!我想请求的是int数组。很容易理解:-问题是如何将包含列表的字符串生成列表数组。这个解决方案正是这样做的。问题指定了[1,2,3]到[1,2,3]。这个答案并没有做到这一点。这个小小的修改会得到预期的结果[inti for i in k[1:-1]。split',']哦,你说得对,我完全错过了字符串的伟大答案!我想请求的是int数组。很容易理解:-问题是如何将包含列表的字符串生成列表数组。这个解决方案正是这样做的。问题指定了[1,2,3]到[1,2,3]。这个答案并没有做到这一点。这个小小的修改会得到预期的结果[inti for i in k[1:-1]。split',']哦,你说得对,我完全错过了