如何将一个看起来已经是列表的字符串转换为列表?

7 浏览
0 Comments

如何将一个看起来已经是列表的字符串转换为列表?

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

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

我想在Python中将其定义为一个列表。我知道可以开始过滤、拆分和重新构建一个新的列表,但是那样我就必须进入循环等等。在Python中有没有一种方式可以直接将该字符串从一个"字符串"提升为一个列表?所以一旦转换完成:

activeStateString -> activeStateList

我可以通过以下方式得到:

print activeStateList[0]

的结果为:

11

谢谢

(Python 2.6)

0
0 Comments

如何将一个看起来像列表的字符串转换成列表?

有时候我们会遇到这样的情况,我们有一个字符串,它的格式看起来像一个列表,但实际上它仍然是一个字符串。如果我们想要将它转换成真正的列表,我们可以使用Python中的ast模块中的literal_eval()函数。

使用ast.literal_eval()函数可以解析包含Python字面值的字符串。它比使用eval()函数更安全,因为它会拒绝解析任何不是字面值的内容。下面是一个示例:

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

输出结果为:['11', '20', '0']

另一方面,使用eval()函数则没有这种限制,它可以解析任何字符串。下面是一个使用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)]'

可以看到,eval()函数可以解析字符串中的任何内容,甚至是一些恶意代码。因此,为了安全起见,我们推荐使用ast.literal_eval()函数。

感谢提问者指出了与eval()函数的区别。

希望这个方法能对你有所帮助!

0
0 Comments

问题的出现原因是,有时候我们会遇到一个看起来像列表的字符串,但实际上它是一个字符串。这种情况下,我们需要将这个字符串转换成真正的列表。解决这个问题的方法是使用Python的ast模块中的literal_eval函数。

首先,我们导入ast模块:

import ast

然后,我们定义一个字符串s,它看起来像一个列表:

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

接下来,我们使用literal_eval函数将字符串转换成列表:

lst = ast.literal_eval(s)

现在,lst变量就是一个真正的列表了:

lst
['11', '20', '0']

如果我们希望将列表中的元素转换成整数,我们可以使用int()函数结合map函数或列表推导:

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

最后,我们还可以通过调用help函数来查看literal_eval函数的帮助文档,以了解更多关于该函数的信息:

help(ast.literal_eval)

literal_eval函数的帮助文档告诉我们,它可以安全地评估一个表达式节点或包含Python表达式的字符串。提供的字符串或节点只能包含以下Python文字结构: 字符串、数字、元组、列表、字典、布尔值和None。

0