将Python字符串形式表示的整数列表转换为整数列表

3

我有一个字符串 [u'[15]'],我需要将其转换为整数列表,即 [15]。我尝试了使用 ast.literal_eval(),但它报错。

ValueError: malformed string

如何解决这个问题?

那看起来像是一个列表,你确定你没有一个列表吗? - Anand S Kumar
当我打印type(value)时,返回<type 'list'>。其中value=[u'[15]']。 - user77005
哦,我明白了问题,我应该执行ast.literal_eval(value[0])。这正确吗? - user77005
@user77005,是的,你不能在列表上调用literal_eval。 - Padraic Cunningham
2个回答

2

您有一个包含Unicode字符串的列表,您需要访问列表中的元素并对其调用literal_eval:

from ast import literal_eval

print literal_eval([u'[15]'][0])
[15]

您尝试将列表传递给literal_eval而不是字符串内部,因此出现错误。
In [2]:  literal_eval(literal_eval([u'[15]']))
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-2-7468abfb5acf> in <module>()
----> 1 literal_eval(literal_eval([u'[15]']))

/usr/lib/python2.7/ast.pyc in literal_eval(node_or_string)
     78                 return left - right
     79         raise ValueError('malformed string')
---> 80     return _convert(node_or_string)
     81 
     82 

/usr/lib/python2.7/ast.pyc in _convert(node)
     77             else:
     78                 return left - right
---> 79         raise ValueError('malformed string')
     80     return _convert(node_or_string)
     81 

2

当我传递列表时,我遇到了您的错误,例如 -

>>> a = [u'[15]']
>>> ast.literal_eval(a)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib64/python2.6/ast.py", line 68, in literal_eval
    return _convert(node_or_string)
  File "/usr/lib64/python2.6/ast.py", line 67, in _convert
    raise ValueError('malformed string')
ValueError: malformed string

如果我传入像"[u'[15]']"这样的字符串,我不会收到任何错误提示。
>>> a = "[u'[15]']"
>>> ast.literal_eval(a)
[u'[15]']

看起来你有一个列表,而不是一个字符串,如果是这样的话,你可以遍历列表,然后将元素传递给 ast.literal_eval 函数,以获取你的元素。例如 -

>>> a = [u'[15]']
>>> import ast
>>> for i in a:
...     ast.literal_eval(i)
...
[15]

您可以将每个元素存储在自己的列表中,或者如果您确定只有一个元素,也可以这样做 -
>>> x = ast.literal_eval(a[0])
>>> x
[15]
>>> type(x)
<type 'list'>

你最后的代码片段中,x的类型是什么? - sawyermclane
1
这是一个列表。将其添加到答案中。 - Anand S Kumar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接