Преобразовать str в list без изменений

Я получаю такую строку l = ['3:2', '1:1', '2:1'], как мне из неё сделать список? Пытался сделать так: list(l), но она разбивает каждый символ: ['[', "'", '3', ':', '2', "'", ',', ' ', "'", '1', ':', '1', "'", ',', ' ', "'", '2', ':', '1', "'", ']']


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

Автор решения: DiMithras
eval(l)

Но с eval надо быть осторожным, можно неприятные вещи словить.

Это очень мощная, но в то же время и очень опасная инструкция, особенно если строки, которые вы передаёте в eval, получены не из доверенного источника. Что будет, если строкой, которую мы решим скормить eval'у, окажется os.system('rm -rf /')?

Более безопасной опцией будет ast ответ на английском stackoverflow.

import ast

l = "['3:2', '1:1', '2:1']"
ast.literal_eval(l)
Вывод:
['3:2', '1:1', '2:1']
→ Ссылка
Автор решения: Виталий
import re

l = "['3:2', '1:1', '2:1']"

answer = re.findall(r"\d+:\d+", l) 
#answer = ['3:2', '1:1', '2:1']

answer1 = [[int(x[0]), int(x[-1])] for x in re.findall(r"\d+:\d+", l)] 
#answer1 = [[3, 2], [1, 1], [2, 1]]

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

→ Ссылка