#python #python-3.x #string
#python #python-3.x #строка
Вопрос:
У меня проблема, когда я пытаюсь снова превратить строку в список. Но это то, что происходит
Исходный код:
string = "[1, 1]"
list1 = list(string)
print(str(list1))
Вывод: ['[', '1', ',', ' ', '1', ']']
Я ожидал, что преобразованный список будет выглядеть следующим образом
[1, 1]
Комментарии:
1. Вы пробовали
eval(string)
илиexec(string)
?
Ответ №1:
То, что вы пытаетесь сделать, всегда будет разбивать каждый символ строки на элемент в новом списке, что вам нужно сделать, это проанализировать строку как есть в ее эквивалент списка следующим образом:
import json
string = "[1, 1]"
list_output = json.loads(string)
List — это совместимый с JSON тип данных, поэтому вы можете преобразовать его обратно в объект python, даже если в этом списке есть словари или другие собственные типы данных.
С уважением
Ответ №2:
когда вы меняете тип строки на список, он разбивает все символы на элементы списка.
простое решение со встроенной функцией:
list1 = eval(string)
Комментарии:
1. извините, я ошибочно принял eval за compile. eval принимает выражение в виде строки, вычисляет его и возвращает результат. в этом случае он возвращает список.
2. Теперь это имеет гораздо больше смысла. Я предполагаю
eval()
, что также выполняет числовые операции?3. @ChaddRobertson да. он анализирует выражение и выполняет его как код python. таким образом, он выполняет числовую операцию
4. @ChaddRobertson Да, eval() можно использовать для оценки и выполнения любого фрагмента кода в этой строке. Хотя это возвращает желаемый результат, eval следует использовать очень осторожно и часто не одобряется в производстве или там, где вы получаете значение, которое отправляете в eval от пользователя, поскольку это открывает дверь для множества уязвимостей. Будьте очень осторожны, где и как используется eval .
5. Просто для справки: medium.com/swlh/hacking-python-applications-5d4cd541b3f1
Ответ №3:
Когда вы передаете строку в функцию list(), она разбивает строку на каждый символ. Если вам нужен список [1, 1], то вы хотите, чтобы ваша строка была «11»
string = "11"
list1 = list(string)
print(str(list1))
Вывод:
[1, 1]
Комментарии:
1. Даже если это сработает, вы просите изменить базовый объект string таким образом, чтобы подход работал, скорее, подход должен быть изменен на основе имеющегося у вас объекта. Допустим, это был ответ от стороннего API, мы не могли пойти и попросить их изменить структуру ответа в соответствии с нашим подходом.
2. Хороший момент! Я просто думал о правильной строке для разделения, но если вам будет предоставлена строка в качестве входных данных, то этот подход не будет работать.
Ответ №4:
Если вы хотите избежать какого-либо импорта, вы можете сделать это:
string = "[1, 1]"
new_list = [int(i) for i in string[1:-1].split(',')]
Это приведет к:
[1, 1]