#python #string #set
#python #строка #установить
Вопрос:
Я хочу преобразовать stringset в строку, используя python3.
Input = «{‘abc’,’def’}»
Я перепробовал все доступные мне возможности, такие как eval, literal_eval и преобразование в set и т.д. Но я не смог найти решение.
Решение и объяснение будут высоко оценены. Спасибо!
Комментарии:
1. Какой результат вы ищете?
('abc','def')
?2. Эй, я ищу список строк. Спасибо!
Ответ №1:
Выполните преобразование внутри eval
вызова:
inp = "{'abc','def'}"
lst = eval("list(" inp ")") # eval("list({'abc','def'})")
print(lst)
Вывод:
['def', 'abc']
Порядок изменен, поскольку исходная строка представляет собой неупорядоченный набор. Чтобы сохранить порядок, вам нужно поменять скобки местами:
inp = "{'abc','def'}"
lst = eval("[" inp[1:-1] "]") # eval("['abc','def']")
print(lst)
Вывод:
['abc', 'def']
Если вы хотите использовать ast.literal_eval
вместо eval
, попробуйте этот код:
# read as set
inp = "{'abc','def'}"
lst = list(ast.literal_eval(inp)) # ast.literal_eval("{'abc','def'}")
print(lst) # ['abc', 'def']
# read as list
inp = "{'abc','def'}"
lst = list(ast.literal_eval("[" inp[1:-1] "]")) # ast.literal_eval("['abc','def']")
print(lst) # ['abc', 'def']
Обратите внимание, что eval вернул первый результат в неправильном порядке, в то время как literal_eval
вернул его в том же порядке, что и строка.
Комментарии:
1. Большое вам спасибо. Ценю ваш ответ
2. есть ли способ, который я могу использовать как.literal_eval в этом примере, поскольку pep8 поощряет использование ast.literal_eval для установки eval, потому что это небезопасный метод.
3. Потрясающая работа, Майк.