簡體   English   中英

將整數列表形式的python字符串轉換為正確的整數列表

[英]Convert a python string in a integer list form to a proper list of integers

我有一個字符串[u'[15]'] 我需要它作為一個帶有int的列表即[15]我試過ast.literal_eval()但它給出了錯誤

ValueError: malformed string

我如何解決它?

你有一個內部帶有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 

我收到你的錯誤,當我傳入列表時,示例 -

>>> 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'>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM