Python - строка в список - PullRequest
       1

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

2 голосов
/ 30 августа 2011

Мне нужно привести список к строке и вернуть строку в список. Есть способ Python, чтобы сделать это поведение?

l1 = ['aa','bb','cc']
s = str(l1)
l2 = cast_string_to_list(s)
print l2
"['aa','bb','cc']"

Ответы [ 5 ]

9 голосов
/ 30 августа 2011

Использовать библиотеку сериализации, например json:

import json

l1 = ['aa','bb','cc']
s = json.dumps(l1)
l2 = json.loads(s)

print s
print l1 == l2
4 голосов
/ 30 августа 2011

В некоторых последних версиях Python вы можете использовать ast.literal_eval, что по сути является eval без проблем с безопасностью. Вы могли бы также попытаться выполнить синтаксический анализ самостоятельно (или использовать синтаксический анализатор Python, а затем повторить логику literal_eval перед вычислением AST), хотя оба являются переосмыслением колеса, и последнее, вероятно, гораздо менее надежно, как только как доходит до строковых литералов.

Зачем тебе это все равно? Существуют форматы сериализации, которые могут обрабатывать преобразование в и из строки различных структур данных (не только списков строк), например, Pickle (несколько небезопасно само по себе, прочитайте уведомление в документации), JSON , YAML и, возможно, больше. Они гораздо надежнее и подходят для таких задач.

2 голосов
/ 30 августа 2011

Вы можете использовать модуль Ast:

import ast

l1 = ['aa','bb','cc']
s = str(l1)
ast.literal_eval(s)
>>> ['aa','bb','cc']

Или как-то так, но мне это не очень нравится:

l1 = ['aa','bb','cc']
s = str(l1)
l2 = [x.strip(" '") for x in s.strip('[]').split(',')]
1 голос
/ 30 августа 2011

Модуль pickle , вероятно, то, что вы ищете:

import pickle
l1 = ['aa','bb','cc']
s = pickle.dumps(l1)
l2 = pickle.loads(s)
print l2
0 голосов
/ 30 августа 2011

Если вы всегда работаете со списком, то следующие вещи должны работать нормально.Осторожно, он не будет приводить целые числа к целым и тому подобному;они всегда будут строковыми элементами в списке.

l1 = ['aa','bb','cc']
s = str(l1)

l2 = s[1:-1].split(',')

print l2
['aa', 'bb', 'cc']

Возможно, вы захотите проверить границы строки и тому подобное, чтобы убедиться, что она достаточно длинна для этого массива ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...