Python список строк в список

python

408 просмотра

6 ответа

У меня есть строка:

s= "[7, 9, 41, [32, 67]]"

и мне нужно преобразовать эту строку в список:

l= [7, 9, 41, [32, 67]]

проблема в том, что когда я использую списки, я получаю это:

['[', '7', ',', ' ', '9', ',', ' ', '4', '1', ',', ' ', '[', '3', '2', ',', ' ', '6', '7', ']', ']']

Я использую python 3.2

Автор: Parker Hoyes Источник Размещён: 13.11.2019 11:31

Ответы (6)


4 плюса

Решение

Вы можете сделать именно то, что вы просили, используя ast.literal_eval():

>>> ast.literal_eval("[7, 9, 41, [32, 67]]")
[7, 9, 41, [32, 67]]

Тем не менее, вы, вероятно, захотите использовать разумный формат сериализации, такой как JSON, вместо того, чтобы полагаться на строковое представление объектов Python. (Как примечание: у вас может быть даже строка JSON, поскольку представление JSON этого конкретного объекта будет выглядеть идентично представлению строки Python. Поскольку вы не упомянули JSON, я предполагаю, что это не то, что вы использовали для получить эту строку.)

Автор: Sven Marnach Размещён: 16.09.2012 02:26

2 плюса

Используйте astмодуль, у него есть удобная .literal_eval()функция :

import ast

l = ast.literal_eval(s)

На приглашение Python:

>>> import ast
>>> s= "[7, 9, 41, [32, 67]]"
>>> ast.literal_eval(s)
[7, 9, 41, [32, 67]]
Автор: Martijn Pieters Размещён: 16.09.2012 02:25

2 плюса

Вы хотите использовать ast.literal_eval:

import ast
s= "[7, 9, 41, [32, 67]]"
print ast.literal_eval(s)
# [7, 9, 41, [32, 67]]
Автор: David Robinson Размещён: 16.09.2012 02:25

0 плюса

Использование: пакет ast: function: literal_eval (node_or_string)

http://docs.python.org/library/ast.html#module-ast

Автор: user1446258 Размещён: 16.09.2012 03:24

0 плюса

Это еще один ответ, но я не предлагаю вам. Потому что execэто опасно.

>>> s= "[7, 9, 41, [32, 67]]"
>>> try:
...   exec 'l = ' + s
...   l
... except Exception as e:
...   e
[7, 9, 41, [32, 67]]
Автор: Shameem Размещён: 11.01.2017 04:22

0 плюса

почему бы не использовать eval()?

>>> s = "[7, 9, 41, [32, 67]]"
>>> eval(s)
[7, 9, 41, [32, 67]]
Автор: Ryan Размещён: 12.04.2017 01:47
Вопросы из категории :
32x32