首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将已经看起来像列表的字符串转换为列表?

如何将已经看起来像列表的字符串转换为列表?
EN

Stack Overflow用户
提问于 2013-11-07 12:21:45
回答 2查看 471关注 0票数 0

我有一个字符串,它看起来已经像一个列表:

代码语言:javascript
运行
复制
activeStateString = "['11', '20', '0']"

我想把它定义为Python中的一个列表。我知道我可以开始过滤,分解它,重建一个新的列表,但是我必须进入循环等等。在Python中有什么方法可以立即将这个字符串从一个“字符串”推广到一个列表呢?因此,一旦它被转换成:

代码语言:javascript
运行
复制
activeStateString -> activeStateList

我得到:

代码语言:javascript
运行
复制
11

适用于:

代码语言:javascript
运行
复制
print activeStateList[0]

谢谢

(Python 2.6)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-07 12:23:05

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

代码语言:javascript
运行
复制
>>> import ast
>>> ast.literal_eval("['11', '20', '0']")
['11', '20', '0']

这比使用eval()更安全,因为它将拒绝解释任何非文字值的内容:

代码语言:javascript
运行
复制
>>> 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
票数 6
EN

Stack Overflow用户

发布于 2013-11-07 12:22:54

使用ast.literal_eval

代码语言:javascript
运行
复制
>>> import ast
>>> s = "['11', '20', '0']"
>>> lst = ast.literal_eval(s)
>>> lst
['11', '20', '0']

如果要将列表项转换为整数,请将int()map或列表理解一起使用:

代码语言:javascript
运行
复制
>>> map(int, lst)
[11, 20, 0]

关于ast.literal_eval的帮助

代码语言:javascript
运行
复制
>>> 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.
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19835824

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档