Чтобы преобразовать строку в список в Python, вызовите метод split() и передайте ему разделитель: "яблоко,банан,вишня".split(",") вернёт ['яблоко', 'банан', 'вишня']. Без аргумента split() делит строку по пробелам, табуляциям и переводам строк. Если нужен список отдельных символов, подойдёт list("питон").
Ниже разобраны оба случая, а ещё перевод частей в числа, несколько разделителей сразу, строки вида "[1, 2, 3]" и ошибки, на которых чаще всего ломается код. Если язык для вас новый, начните с первых примеров на Python, а потом возвращайтесь сюда.
Как разбить строку на список методом split()

Метод split() есть у любой строки. Он возвращает новый список, исходная строка не меняется.
- Посмотрите, чем разделены значения в строке: запятой, точкой с запятой, пробелом.
- Вызовите
строка.split(разделитель)и сохраните результат в переменную. - Если значения разделены пробелами, вызовите
split()вообще без аргумента. - Выведите список через
print()и проверьте, нет ли в нём лишних пробелов и пустых элементов.
fruits = "яблоко,банан,вишня"
items = fruits.split(",")
print(items)
# ['яблоко', 'банан', 'вишня']
words = " раз два\tтри\nчетыре ".split()
print(words)
# ['раз', 'два', 'три', 'четыре']
Во втором примере пробелов между словами по несколько, а по краям строки они тоже есть. split() без аргумента склеивает подряд идущие пробельные символы в один разделитель и выбрасывает пустые куски на краях. В документации Python это описано как отдельный алгоритм для случая, когда sep не указан. Если документация пока кажется запутанной, начните со статьи о том, как устроен сайт python.org и где в нём искать методы строк.
С явным пробелом split(" ") поведение другое: каждый пробел режет строку отдельно.
print(" раз два ".split(" "))
# ['', '', 'раз', '', '', 'два', '']
Решение: для текста, где слова разделены пробелами, пишите split() без аргументов. Явный " " нужен, только когда пустые элементы что-то значат, например пропущенное поле.
Как убрать пробелы вокруг элементов
Строки вида "яблоко, банан , вишня" часто приходят из веб-форм и выгрузок таблиц. После split(",") пробелы остаются внутри элементов, и сравнение "банан" == " банан " даёт False.
raw = "яблоко, банан , вишня"
print(raw.split(","))
# ['яблоко', ' банан ', ' вишня']
clean = [item.strip() for item in raw.split(",")]
print(clean)
# ['яблоко', 'банан', 'вишня']
Вариант raw.split(", ") с пробелом в разделителе выглядит короче, но он хрупкий. На той же строке он вернёт 'банан ' с хвостовым пробелом, потому что перед запятой пробел тоже стоит. Надёжнее делить по голой запятой и чистить каждый элемент через strip().
Конструкция в квадратных скобках называется списковым включением. Её же удобно применять, когда список нужно сразу отфильтровать или отсортировать: про сортировку подробно написано в статье о методе sort().
Канал основателя Checkroi Вани Буявца3 700 человек читают мой Телеграм-канал про нейросетиСобрал промпты для Claude Code и ChatGPT, разборы ИИ-инструментов и лайфхаки по продвижению бизнеса в одном местеПрисоединитьсяКак ограничить число частей: maxsplit и rsplit()
Второй аргумент maxsplit задаёт, сколько раз резать строку. По документации частей получится не больше maxsplit + 1, а всё остальное останется в последнем элементе целиком.
line = "2026-10-15 ERROR Не удалось открыть файл: data.csv"
print(line.split(" ", 2))
# ['2026-10-15', 'ERROR', 'Не удалось открыть файл: data.csv']
path = "путь/к/файлу/report.pdf"
print(path.rsplit("/", 1))
# ['путь/к/файлу', 'report.pdf']
split(sep, n)режет слева направо. Подходит для строк лога: дата и уровень отдельно, текст сообщения целиком. Файл лога обычно читают построчно в циклеforили while и режут каждую строку.rsplit(sep, n)режет справа. Так удобно отделить имя файла от папки или расширение от имени.partition(sep)делит по первому вхождению и всегда возвращает кортеж из трёх частей:"ключ=значение=ещё".partition("=")даёт('ключ', '=', 'значение=ещё'). Если разделителя нет, вторая и третья части будут пустыми строками, исключения не будет.
Другие способы превратить строку в список

Метод split() закрывает большую часть задач, но не все. Сводка по остальным случаям:
| Что в строке | Способ | Результат |
|---|---|---|
| Слово, нужны буквы | list(s) |
список символов |
| Числа через запятую или пробел | list(map(int, s.split(","))) |
список чисел |
| Разные разделители вперемешку | re.split() |
список строк |
Запись вида "[1, 2, 3]" |
ast.literal_eval() или json.loads() |
настоящий список |
| Строка CSV с кавычками | csv.reader |
поля без кавычек |
| Текст из нескольких строк | s.splitlines() |
список строк текста |
Строку в список символов: list()
Функция list() проходит по строке и кладёт каждый символ отдельным элементом. Вызов "питон".split() здесь не поможет: пробелов в слове нет, и вы получите список из одного элемента.
print(list("питон"))
# ['п', 'и', 'т', 'о', 'н']
print("питон".split())
# ['питон']
Строку чисел в список чисел: map()
После split() все элементы остаются строками, и "10" + "20" даст "1020". Переведите их функцией map() или списковым включением.
print(list(map(int, "10,20,30".split(","))))
# [10, 20, 30]
print([float(x) for x in "1.5 2.25 3".split()])
# [1.5, 2.25, 3.0]
a, b, c = map(int, "3 7 15".split())
print(a + b + c)
# 25
Последний приём часто встречается в учебных задачах: так читают несколько чисел, введённых в одну строку через input(). Потренироваться можно на задачах по Python для начинающих, а сложить такой список поможет статья о том, как суммировать список.
Несколько разделителей сразу: re.split()
Обычный split() принимает один разделитель. Когда в строке встречаются и запятые, и точки с запятой, и вертикальная черта, документация Python советует функцию re.split() из модуля регулярных выражений re.
import re
cities = "Москва; Казань,Пермь| Омск"
print(re.split(r"[;,|]\s*", cities))
# ['Москва', 'Казань', 'Пермь', 'Омск']
В квадратных скобках перечислены все разделители, а \s* съедает пробелы после них. Описание функции есть в справке модуля re.
Строка, которая выглядит как список: ast.literal_eval()
Строка "[1, 2, 'три']" похожа на список, но это текст. split() оставит в элементах скобки и кавычки. Правильный инструмент здесь ast.literal_eval(): он разбирает запись литерала Python и возвращает настоящий список.
import ast, json
print(ast.literal_eval("[1, 2, 'три']"))
# [1, 2, 'три']
print(json.loads('["a", "b", 3]'))
# ['a', 'b', 3]
Если данные пришли из API в формате JSON, берите json.loads(). Строку в одинарных кавычках он не примет и выдаст JSONDecodeError, для неё нужен literal_eval.
Обычный
eval()для такой задачи не берите: он выполнит любой код из строки. literal_eval код не запускает, но в документации предупреждают: даже сравнительно небольшая строка может исчерпать память или стек и уронить процесс, поэтому вызывать его на непроверенных данных не рекомендуется. Данные от пользователей и чужих сервисов принимайте в JSON и разбирайте черезjson.loads().
CSV-строка с запятыми внутри кавычек: csv.reader
В строке Иванов,"Москва, ул. Ленина",35 адрес содержит запятую. Метод split(",") разрежет его пополам, а модуль csv учтёт кавычки.
import csv, io
row = 'Иванов,"Москва, ул. Ленина",35'
print(row.split(","))
# ['Иванов', '"Москва', ' ул. Ленина"', '35']
print(next(csv.reader(io.StringIO(row))))
# ['Иванов', 'Москва, ул. Ленина', '35']
Текст по строкам: splitlines()
Метод splitlines() делит текст по переводам строк, причём понимает и \n, и \r\n из файлов Windows. Если делить через split("\n"), на файлах из Windows в конце строк останется \r.
print("первая\nвторая\r\nтретья".splitlines())
# ['первая', 'вторая', 'третья']
Частые ошибки и что с ними делать

Большая часть проблем со split() связана с тем, что пришло на вход. Вот симптомы, которые встречаются чаще других.
AttributeError: 'NoneType' object has no attribute 'split'. В переменной лежитNone: функция ничего не вернула или поле пустое. Проверьте источник значения или подставьте пустую строку:(value or "").split(",").AttributeError: 'list' object has no attribute 'split'. Строку уже разделили раньше, иsplit()вызывают у списка. Ищите, где переменная перезаписалась.- Пустая строка превращается в
['']. С указанным разделителем"".split(",")возвращает список с одной пустой строкой, а"".split()без аргумента даёт[]. Так описано в документации. Из-за этого проверкаif items:считает список непустым, хотя данных в нём нет. - Лишний пустой элемент в конце.
"a,b,".split(",")даёт['a', 'b', ''], а две запятые подряд дают пустой элемент посередине. Отфильтруйте:[x for x in s.split(",") if x]. ValueError: empty separator. Вызовsplit("")запрещён. Чтобы разбить строку на символы, используйтеlist().ValueError: too many values to unpack. Частей больше, чем переменных слева:a, b = "1 2 3".split(). Задайтеmaxsplitили примите результат в список.
Пробелы вокруг чисел функция int() прощает: list(map(int, "10, 20, 30".split(","))) отработает без strip(). А вот буква или пустой элемент в списке вызовут ValueError: invalid literal for int(), поэтому пустые куски убирайте до перевода в числа.
Как собрать список обратно в строку
Обратная операция делается методом join(). Его вызывают у строки-разделителя и передают список.
items = ["яблоко", "банан", "вишня"]
print(", ".join(items))
# яблоко, банан, вишня
Все элементы должны быть строками: на числе join() выдаст TypeError, поэтому сначала переведите их через map(str, ...). Между разбором и сборкой со списком обычно что-то делают: добавляют элементы или удаляют лишние.
Где освоить Python системно
Разбор строк на списки нужен в любой задаче, где данные приходят текстом: логи, выгрузки, ответы API, ввод пользователя. Если вы каждый раз ищете решение заново, курс сэкономит время: строки, списки, словари и работа с файлами идут в программе по порядку, одна тема опирается на другую.
Ниже пять программ из каталога курсов по Python, там же можно сравнить цены и длительность остальных.
| Курс | Школа | Стоимость со скидкой | В рассрочку | Длительность | Обзор курса от Checkroi |
|---|---|---|---|---|---|
| Профессия «Python-разработчик» Перейти на сайт курса | 157 335 ₽ | 5987 ₽/мес. | 10 месяцев | Обзор курса | |
| Fullstack-разработчик на Python Перейти на сайт курса | 137 011 ₽ | 7125 ₽/мес. | 21 месяц | Обзор курса | |
| ДО Профессия Python-разработчик Перейти на сайт курса | 149 001 ₽ | 3167 ₽/мес. | 10 месяцев | Обзор курса | |
| Автоматизированное тестирование на Python Перейти на сайт курса | 118 666 ₽ | 4108 ₽/мес. | 9 месяцев | Обзор курса | |
| Программирование на Python ПРО Перейти на сайт курса | 119 600 ₽ | - | 17 месяцев | Обзор курса |
Больше программ — в полном каталоге курсов по Python




