Проблемы с превращением строки в список

#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]