Python 如何将已经看起来像列表的字符串转换为列表?
我有一个看起来像列表的字符串:Python 如何将已经看起来像列表的字符串转换为列表?,python,Python,我有一个看起来像列表的字符串: activeStateString = "['11', '20', '0']" 我想用Python将其定义为一个列表。我知道我可以开始过滤并分解它,然后重新生成一个新列表,但我必须进入循环等。Python中有没有一种方法可以直接将该字符串从“字符串”提升到列表?因此,一旦转换后: activeStateString -> activeStateList 我得到: 11 用于: 谢谢 (Python 2.6)使用: 如果要将列表项转换为整数,请将int(
activeStateString = "['11', '20', '0']"
我想用Python将其定义为一个列表。我知道我可以开始过滤并分解它,然后重新生成一个新列表,但我必须进入循环等。Python中有没有一种方法可以直接将该字符串从“字符串”提升到列表?因此,一旦转换后:
activeStateString -> activeStateList
我得到:
11
用于:
谢谢
(Python 2.6)使用:
如果要将列表项转换为整数,请将int()
与map
或列表理解一起使用:
>>> map(int, lst)
[11, 20, 0]
有关ast.literal\u 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.
用于解释包含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
>>>评估(“导入系统”)版本)
“2.7.5(默认值,2013年10月28日,20:45:48)\n[GCC 4.2.1(基于Apple Inc.build 5658)(LLVM build 2336.11.00)]”
>>>ast.literal\u eval(“\uuuuu import\uuuuuu('sys').version”)
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“/Users/mj/Development/Library/buildout.python/parts/opt/lib/python2.7/ast.py”,第80行,以文本形式
返回\u转换(节点\u或字符串)
文件“/Users/mj/Development/Library/buildout.python/parts/opt/lib/python2.7/ast.py”,第79行,在
raise VALUERROR('格式错误的字符串')
ValueError:格式不正确的字符串
+1感谢您向eval
提及差异。谢谢!那应该行!非常感谢你!我将研究“ast”。谢谢@Symbolx很高兴这有帮助。
>>> import ast
>>> ast.literal_eval("['11', '20', '0']")
['11', '20', '0']
>>> 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