将表示列表的字符串转换为实际的列表对象

时间:2011-03-06 23:48:11

标签: python string list type-conversion

我有一个表示列表的字符串:

"[22, 33, 36, 41, 46, 49, 56, 72, 85, 92, 95, 98, 107, 118, 120, 123, 124, 126, 127, 130, 149, 157, 161, 171, 174, 177, 187, 195, 225, 302, 316, 359, 360, 363, 396, 479, 486, 491]"

我想将该字符串转换为实际列表。我想可以将数字重新排除并循环(append()),但有更简单的方法吗?不知道如何将其设置为正则表达式。

5 个答案:

答案 0 :(得分:12)

使用ast.literal_eval

>>> import ast
>>> i = ast.literal_eval('[22, 33, 36, 41, 46, 49, 56]')
>>> i[3]
41

答案 1 :(得分:4)

另一种方式:

import json
x=json.loads("[22, 33, 36, 41, 46, 49, 56, 72, 85, 92, 95, 98, 107, 118, 120, 123, 124, 126, 127, 130, 149, 157, 161, 171, 174, 177, 187, 195, 225, 302, 316, 359, 360, 363, 396, 479, 486, 491]")

答案 2 :(得分:2)

如果您的实际字符串是

s = "[22, 33, 36, 41, 46, 49, 56, 72, 85, 92, 95, 98, 107, 118, 120, 123, 124, 126, 127, 130, 149, 157, 161, 171, 174, 177, 187, 195, 225, 302, 316, 359, 360, 363, 396, 479, 486, 491]"

然后这将解决问题:

[int(n) for n in s[1:-1].split(', ')]

答案 3 :(得分:1)

试试这个:

sl = "[22, 33, 36, 41, 46, 49, 56, 72, 85, 92, 95, 98, 107, 118, 120, 123, 124, 126, 127, 130, 149, 157, 161, 171, 174, 177, 187, 195, 225, 302, 316, 359, 360, 363, 396, 479, 486, 491]"
sl = sl.lstrip('[')
sl = sl.rstrip(']')
sl = sl.split(',')

丑陋和hacky,但它会工作!

答案 4 :(得分:0)

您可以使用内置的eval http://docs.python.org/library/functions.html#eval

>>> lst = eval("[22, 33, 36, 41, 46, 49, 56, 72, 85, 92, 95, 98, 107, 118, 120, 123, 124, 126, 127, 130, 149, 157, 161, 171, 174, 177, 187, 195, 225, 302, 316, 359, 360, 363, 396, 479, 486, 491]")
>>> type(lst)
<type 'list'>
>>> lst[0]
22