将看起来像列表的字符串转换为真正的列表 - python

Posted

技术标签:

【中文标题】将看起来像列表的字符串转换为真正的列表 - python【英文标题】:Converting string that looks like a list into a real list - python 【发布时间】:2013-12-13 13:30:27 【问题描述】:

我的输入文件的行如下所示:

[(0, 1), (1, 3), (2, 1), (3, 1), (4, 1)]
[(0, 1, 6), (1, 3,7), (3, 1,4), (3, 1,3), (8, 1,2)]
[1,2,3,5,3]

没有字母,没有小数,只有整数和元组中的元素个数一致。

如何将它们变成真正的元组列表/int 列表?

【问题讨论】:

【参考方案1】:

Python 自带电池 - ast.literal_eval() 解决了这个问题:

>>> import ast
>>> ast.literal_eval("[(0, 1), (1, 3), (2, 1), (3, 1), (4, 1)]")
[(0, 1), (1, 3), (2, 1), (3, 1), (4, 1)]
>>> ast.literal_eval("[(0, 1, 6), (1, 3,7), (3, 1,4), (3, 1,3), (8, 1,2)]")
[(0, 1, 6), (1, 3, 7), (3, 1, 4), (3, 1, 3), (8, 1, 2)]
>>> ast.literal_eval("[1,2,3,5,3]")
[1, 2, 3, 5, 3]

【讨论】:

@alvas:请注意ast.literal_eval 是安全的,而eval 不是。 @StevenRumbalski 为什么 ast.literal_eval 安全而 eval 不安全? @jeppo1:您要评估的字符串通常来自不受信任的来源。 eval 将运行任意代码。从第三方运行任意代码是一个安全漏洞。 ast.literal_eval,因为它只解释“字符串、字节、数字、元组、列表、字典、集合、布尔值和无”而持有的插件。任何其他都是错误。

以上是关于将看起来像列表的字符串转换为真正的列表 - python的主要内容,如果未能解决你的问题,请参考以下文章

将字符串转换为列表并嵌套在data.table中

将列表中的所有字符串转换为浮点数。适用于单个列表,但不适用于数据框

如何将熊猫系列的列值转换为Python中的列表?

如何将字典转换为列表列表? [复制]

将列表转换为具有新属性名称的另一个新列表

Python:将字典列表转换为 json