Я список отформатирован, как показано здесь:Преобразование строки Python в список
>>> x = "[26, 25]"
>>> list(x)
['[', '2', '6', ',', ' ', '2', '5', ']']
Как преобразовать в список с элементами, как показано здесь:
>>> x
[25, 26]
Я список отформатирован, как показано здесь:Преобразование строки Python в список
>>> x = "[26, 25]"
>>> list(x)
['[', '2', '6', ',', ' ', '2', '5', ']']
Как преобразовать в список с элементами, как показано здесь:
>>> x
[25, 26]
Использование ast.literal_eval()
:
import ast
ast.literal_eval(x)
или рассматривать его как JSON, используя json.loads()
:
import json
json.loads(x)
ast.literal_eval()
принимает литералов Python в качестве входных данных (так текст, который в Python исходный код даст вам значение), json.loads()
принимает ввод JSON.
Демо:
>>> import ast, json
>>> x = "[26, 25]"
>>> ast.literal_eval(x)
[26, 25]
>>> json.loads(x)
[26, 25]
Разница между ними только приходит в игру, когда у вас есть больше, чем список целых чисел в вашей входной строки; Строки JSON содержат unicode, который ast.literal_eval()
на Python 2 не будет интерпретировать правильно, а типы JSON - это только подмножество того, что поддерживает ast.literal_eval()
.
>>> x = '["List", "with", "strings", "including", "snowman", "\u2603"]'
>>> ast.literal_eval(x)
['List', 'with', 'strings', 'including', 'snowman', '\\u2603']
>>> json.loads(x)
[u'List', u'with', u'strings', u'including', u'snowman', u'\u2603']
>>> x = "(1, 2, 3, 'a tuple is Python syntax, not JSON')"
>>> ast.literal_eval(x)
(1, 2, 3, 'a tuple is Python syntax, not JSON')
>>> json.loads(x)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/mj/Development/Library/buildout.python/parts/opt/lib/python2.7/json/__init__.py", line 338, in loads
return _default_decoder.decode(s)
File "/Users/mj/Development/Library/buildout.python/parts/opt/lib/python2.7/json/decoder.py", line 365, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/Users/mj/Development/Library/buildout.python/parts/opt/lib/python2.7/json/decoder.py", line 383, in raw_decode
raise ValueError("No JSON object could be decoded")
ValueError: No JSON object could be decoded
Лучше, чем «Eval» (от безопасности и скорости (возможно) точки зрения) будет:
[int(v) for v in x[1:-1].replace(" ", "").split(",")]
другой вариант, если вы знаете, что вы делаете правильные вещи
x = "[26, 25]"
y = eval(x)
print y
существует опасность впрыска вредоносного кода с этим подходом - если x считывается из файла, и хакер каким-то образом может изменить файл ... – drevicko
Это оказалось быстрее, чем использование [safe eval] (http://docs.python.org/2/library/ast.html#ast.literal_eval) –
Вам нужно было бы «map()' к 'int()', а также для получения целых чисел. –
@MartijnPieters спасибо, отредактирован. – IProblemFactory