【问题标题】:Converting string that looks like a list into a real list - python将看起来像列表的字符串转换为真正的列表 - 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 列表?

【问题讨论】:

    标签: python string list int tuples


    【解决方案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,因为它只解释“字符串、字节、数字、元组、列表、字典、集合、布尔值和无”而持有的插件。任何其他都是错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-29
    • 1970-01-01
    • 2017-11-15
    • 1970-01-01
    相关资源
    最近更新 更多