Как преобразовать строку в массив

например пользователь ввёл [1, 2, 3] в консоль и как мне из этого сделать список. пробовал так но не работает

array = []
exec("array = " + content)
# print(array)
if array[0] == 1:
   print(1)

после exec проверяю массив, а он пустой


Ответы (3 шт):

Автор решения: chagins
# если content - это уже список
content = [1, 2, 3]
array = []
exec("array.extend(content)")
if array[0] == 1:
    print(1)

# если content - это строка
content = '123'
array = []
exec("array.extend(int(i) for i in content)")
print(array)
if array[0] == 1:
    print(1)

# если content - это строка '[1, 2, 3]'
import re
# имеем строку inp
inp = '[1, 2, 3]'
# забираем цифры в список
content = re.findall('\d+', inp)
array = []
exec("array.extend(content)")
print(array)
if array[0] == 1:
    print(1)
→ Ссылка
Автор решения: Andy Pavlov

Не понял зачем Вам exec здесь нужен. Используете обычный парсинг.

Вариант 1. Через функции строки

text = '[1, 2, 3]'    
parse = text.strip('[]').replace(' ', '').split(',')  # список из строковых значений, потом можно преобразовать в нужный формат

Вариант 2. Через библиотеку json.

import json
text = '[1, 2, 3]'
parse = json.loads(text)

Вариант 3. Парсим через библиотеку re

parse = re.findall('([-+]?\d+)', text)  # Если в строке-списке будут только целые числа
parse = re.findall('([-+]?\d*\.\d+|\d+)', text)  # Если будут еще десятичные

Что у Вас получился список можно проверить функцией type(parse), которая выдаст <class 'list'>

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

→ Ссылка
Автор решения: DGDays

Как вариант:

string = '[1, 2, 3]'

string = string[1:-1].replace(', ', '')

arr = []

for i in string:
    arr.append(int(i))

print(type(arr))
→ Ссылка