Как преобразовать строку в список в Python: split(), list() и ещё 5 способов

Строку в список в Python превращает метод split(): для запятой передайте разделитель, для пробелов вызовите его без аргумента.

Внутри примеры с выводом: как убрать лишние пробелы, получить список символов или чисел, разделить строку сразу по нескольким знакам и разобрать запись вида «[1, 2, 3]».

Статью написал:
Ваня Буявец, продюсер, основатель Checkroi
Ваня Буявец
Основатель Checkroi, продюсер, эксперт в выборе онлайн-курсов
Все 2976 статей автора Подписаться на Телеграм-канал
Одобрено экспертом:
Наташа Буявец, основатель Checkroi, эксперт по онлайн-курсам
Наташа Буявец
Основательница Checkroi, продюсер Youtube-каналов, эксперт по онлайн-курсам
Все 3630 экспертных мнений Подписаться на Телеграм-канал
Обложка: Как преобразовать строку в список в Python: split(), list() и ещё 5 способов

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

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

CheckroiCheckroiПодборка курсов по Python566 курсов • 51 школаСравните цены, школы, программу и найдите выгодные предложения по обучениюСравнить→

Как разбить строку на список методом split()

Рой разрезает длинную строку на отдельные элементы списка

Метод split() есть у любой строки. Он возвращает новый список, исходная строка не меняется.

  1. Посмотрите, чем разделены значения в строке: запятой, точкой с запятой, пробелом.
  2. Вызовите строка.split(разделитель) и сохраните результат в переменную.
  3. Если значения разделены пробелами, вызовите split() вообще без аргумента.
  4. Выведите список через 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, ...). Между разбором и сборкой со списком обычно что-то делают: добавляют элементы или удаляют лишние.

Ваня БуявецКанал основателя Checkroi Вани БуявцаЗабирайте промпты и обучение по нейросетям в моём Телеграм-каналеБольше 3 700 человек уже применяют Claude Code, ChatGPT и другие нейросети в работе, учёбе, бизнесе и жизниПерейти в канал

Где освоить Python системно

Разбор строк на списки нужен в любой задаче, где данные приходят текстом: логи, выгрузки, ответы API, ввод пользователя. Если вы каждый раз ищете решение заново, курс сэкономит время: строки, списки, словари и работа с файлами идут в программе по порядку, одна тема опирается на другую.

Ниже пять программ из каталога курсов по Python, там же можно сравнить цены и длительность остальных.

КурсШколаСтоимость со скидкойВ рассрочкуДлитель­ностьОбзор курса от Checkroi
Профессия «Python-разработчик»
Перейти на сайт курса
SkillboxSkillbox157 335 ₽5987 ₽/мес.10 месяцевОбзор курса
Fullstack-разработчик на Python
Перейти на сайт курса
НетологияНетология137 011 ₽7125 ₽/мес.21 месяцОбзор курса
ДО Профессия Python-разработчик
Перейти на сайт курса
GeekBrainsGeekBrains149 001 ₽3167 ₽/мес.10 месяцевОбзор курса
Автоматизированное тестирование на Python
Перейти на сайт курса
SkillboxSkillbox118 666 ₽4108 ₽/мес.9 месяцевОбзор курса
Программирование на Python ПРО
Перейти на сайт курса
SkillboxSkillbox119 600 ₽ - 17 месяцевОбзор курса

Больше программ — в полном каталоге курсов по Python

Часто задаваемые вопросы

Что делает split() в Python?

Метод split() делит строку по разделителю и возвращает список частей, исходная строка не меняется. Без аргумента он режет по любым пробельным символам и не оставляет пустых элементов по краям.

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

Массивом в Python обычно называют список, поэтому подходит тот же split(): "a,b,c".split(",") вернёт ['a', 'b', 'c']. Если нужен массив NumPy, сначала получите список, а потом передайте его в numpy.array().

Как разбить строку на список символов?

Вызовите list("питон"), получится ['п', 'и', 'т', 'о', 'н']. Вызов split("") с пустым разделителем выдаст ValueError: empty separator.

Как из строки с числами сделать список чисел?

Разделите строку и переведите каждую часть в число: list(map(int, "10,20,30".split(","))) даст [10, 20, 30]. Пустые элементы перед этим уберите, иначе int() выдаст ValueError.

Почему split() возвращает пустые строки?

Если разделитель указан явно, две запятые подряд или запятая в конце строки дают пустой элемент: "a,b,".split(",") вернёт ['a', 'b', '']. Отфильтруйте их выражением [x for x in s.split(",") if x] или делите по пробелам вызовом split() без аргумента.

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

Используйте join() у строки-разделителя: ", ".join(["a", "b"]) вернёт "a, b". Все элементы списка должны быть строками, числа сначала переведите через map(str, список).

Читайте Checkroi первым в Google
Добавьте Checkroi в избранные источники — и наши разборы курсов и обзоры школ будут показываться выше в вашей выдаче Google.
Оставить комментарий
0 комментариев
Форма комментария

Оставьте комментарий

Напишите, что думаете. Нам важно ваше мнение!