【问题标题】:How to convert a string that already looks like a list into a list? [duplicate]如何将已经看起来像列表的字符串转换为列表? [复制]
【发布时间】:2013-11-07 12:21:45
【问题描述】:

我有一个看起来像列表的字符串:

activeStateString = "['11', '20', '0']"

我想将其定义为 Python 中的列表。我知道我可以开始过滤并将其分解并重建一个新列表,但随后我必须进入循环等。Python 中有没有办法立即将该字符串从“字符串”提升为列表?所以一旦转换:

activeStateString -> activeStateList

我明白了:

11

为:

print activeStateList[0]

谢谢

(Python 2.6)

【问题讨论】:

    标签: python


    【解决方案1】:

    使用 ast.literal_eval() 解释包含 Python 文字的字符串:

    >>> import ast
    >>> ast.literal_eval("['11', '20', '0']")
    ['11', '20', '0']
    

    使用eval() 会更安全,因为它会拒绝解释任何字面值的内容:

    >>> eval("__import__('sys').version")
    '2.7.5 (default, Oct 28 2013, 20:45:48) \n[GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.11.00)]'
    >>> ast.literal_eval("__import__('sys').version")
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "/Users/mj/Development/Library/buildout.python/parts/opt/lib/python2.7/ast.py", line 80, in literal_eval
        return _convert(node_or_string)
      File "/Users/mj/Development/Library/buildout.python/parts/opt/lib/python2.7/ast.py", line 79, in _convert
        raise ValueError('malformed string')
    ValueError: malformed string
    

    【讨论】:

    • +1 用于向eval 提及差异。
    • 谢谢!那应该可以!
    【解决方案2】:

    使用ast.literal_eval:

    >>> import ast
    >>> s = "['11', '20', '0']"
    >>> lst = ast.literal_eval(s)
    >>> lst
    ['11', '20', '0']
    

    如果要将列表项转换为整数,请使用 int()map 或列表推导:

    >>> map(int, lst)
    [11, 20, 0]
    

    求助ast.literal_eval:

    >>> help(ast.literal_eval)
    Help on function literal_eval in module ast:
    
    literal_eval(node_or_string)
        Safely evaluate an expression node or a string containing a Python
        expression.  The string or node provided may only consist of the following
        Python literal structures: strings, numbers, tuples, lists, dicts, booleans,
        and None.
    

    【讨论】:

    • 非常感谢!我将研究“ast”。谢谢!
    • @symbolix 很高兴有帮助。
    猜你喜欢
    • 2013-12-13
    • 1970-01-01
    • 2011-02-08
    • 1970-01-01
    • 2015-08-01
    • 1970-01-01
    • 2012-05-23
    • 2013-07-07
    相关资源
    最近更新 更多