Как преобразовать список в строку в Python
Рассказываем о методе join() и других полезных инструментах для конвертирования Python‑списков в строки.


Иллюстрация: Оля Ежак для Skillbox Media

Иван Стуков
Журналист, изучает Python. Любит разбираться в мелочах, общаться с людьми и понимать их.
В Python существует два основных способа сделать из списка строку: с помощью цикла и с помощью метода join(). У обоих есть нюансы, о которых мы сейчас расскажем.
Преобразование с помощью цикла
Более понятный для новичка, но и более громоздкий способ перевести список в строку — воспользоваться циклом. Если вы уже знаете его и просто хотите узнать более эффективный и быстрый метод, то сразу переходите к следующему разделу. А если нет, то давайте разбираться.
Как это работает: мы создаём пустую строку, потом с помощью цикла переберём каждый элемент списка и на каждой итерации будем добавлять к строке текущий элемент списка.
lst = ['Преобразование','через','цикл'] #Создаём пустую строку string = '' #По очереди добавляем к ней каждый элемент списка for el in lst: string += el print(string) >>> Преобразованиечерезцикл
Однако такой код не будет работать, если в списке есть не только строки, но и, например, числа. Дело в том, что в Python нельзя смешивать данные разных типов.
Поэтому, перед тем как добавлять элемент в список, его нужно преобразовать в строку. Делается это с помощью функции str(). Добавим её в наш код.
#Создаём список, в котором есть как строки, так и цифры lst = ['Преобразование','через','цикл', 2] string = '' for el in lst: string += str(el) #Превращаем каждый элемент списка в строку print(string) >>> Преобразованиечерезцикл2
Если нужно установить разделитель между строками, то для него нужно прописать отдельную строчку кода внутри цикла.
lst = ['Преобразование','через','цикл', 3] string = '' for el in lst: #Добавляем к строке элемент списка string += str(el) #Добавляем к строке разделитель — в данном случае пробел string += ' ' print(string) >>> Преобразование через цикл 3
Обратите внимание: раз мы добавляем разделитель на каждой итерации, пробел будет и после цифры 3 нашего последнего элемента. Это легко проверить, если вместо пробела добавлять какой-то другой, видимый символ.
Эту проблему можно решить — ещё больше усложнив код. Например, введя условие, которое проверяет, последний это элемент в списке или нет. Однако гораздо проще и удобнее превратить список в строку, используя встроенный метод join().
Преобразование с помощью метода join()
Метод join(), по сути, делает всё то же самое, что и наш цикл, но лучше, удобнее и занимает всего одну строку. Вот как его применяют:
string.join(lst)
В качестве аргумента lst он получает список, элементы которого и будет объединять в строку, а string — это разделитель. Если мы не хотим его устанавливать, то в качестве string нужно указать пустую строку.
Посмотрим, как join() применяется на практике.
lst = ['Преобразование', 'через', 'метод', 'join()'] #Объединяем элементы списка с пустым разделителем print(''.join(lst)) >>> Преобразованиечерезметодjoin() #Устанавливаем пробел в качестве разделителя print(' '.join(lst)) >>> Преобразование через метод join()
Заметили особенность? Разделители ставятся только между элементами, а не после каждого элемента, как было в нашем цикле. join() — умница. Однако и тут есть ахиллесова пята: если в списке встречаются нестроковые элементы, мы получим ошибку. Чтобы этого избежать, надо опять-таки сначала превратить все нестроки в строки. Сделать это можно двумя способами.
Использовать выражение-генератор
Выражение-генератор — это конструкция, которая позволяет провести операцию над каждым элементом списка. Оно возвращает генератор, с которым метод join() обращается точно так же, как и со списками.
lst = [1, 1.2, 'строка', False] print(' '.join(str(el) for el in lst)) >>> 1 1.2 строка False
Конструкция str(el) for el in lst означает, что каждый элемент el в списке lst будет превращён в строку с помощью функции str (стандартной функции Python, которую мы уже использовали, когда работали с циклом).
Использовать функцию map()
Функция map() умеет делать то же самое, что и выражение-генератор, но их синтаксис отличается. В качестве первого аргумента она принимает саму операцию, в качестве второго — список, к элементам которого эта операция применяется.
lst = [1, 1.2, 'строка', False] print(' '.join(map(str, lst))) >>> 1 1.2 строка False
Конструкция map(str, lst) означает, что каждый элемент в списке lst будет превращён в строку с помощью функции str. Обратите внимание, что в качестве аргумента в map() передаётся только название функции, без скобок.
Итоги
Преобразовать список в строку можно с помощью цикла, но для этого есть и более удобный инструмент — метод join().
Если содержит нестроковые элементы, то их для начала придётся превратить в строки — иначе выскочит ошибка. Для этого можно воспользоваться выражением-генератором или функцией map().
Читайте также:
- Списки в Python: что это такое и как с ними работать
- Тест. Какой язык создадите вы — Java или Python?
- Язык Go: что под капотом и зачем программисту учить его как второй
Как объединить строки в Python: использование .join() вместо +

Кандидат философских наук, специалист по математическому моделированию. Пишет про Data Science, AI и программирование на Python.
Python ценят за его интуитивную понятность. Так, строки можно объединить простым плюсом:

Что ещё за .join() такой?
Возьмём те же строки s1 и s2 и попробуем повторить предыдущий результат с помощью .join():

- На каждой итерации цикла из списка вынимается строка.
- Интерпретатор выполняет команду result += ‘ ‘ + s, сначала запрашивая память для пробела ‘ ‘.
- Затем он запрашивает память для строки s.
- Так происходит шесть раз, и в каждой итерации есть два запроса в память — для пробела и для строки, итого 12.
А что происходит, когда мы объединяем эти же строки с помощью .join()?

- Интерпретатор подсчитывает количество строк в списке: 6.
- Подсчитывает количество нужных для объединения пробелов: 5.
- Обращается в память сразу за одиннадцатью ячейками.
- Формирует строку, выдаёт результат.
Как видим, всё происходит гораздо компактнее. Меньшее количество обращений к памяти — основная причина более высокой скорости работы функции join() по сравнению с циклом for и +.
Подытожим
Дружелюбие синтаксиса Python к начинающим — это прекрасно, без всяких преувеличений. Но если программист не хочет быть начинающим всю свою жизнь, то придётся постоянно осваивать более мощные и часто менее очевидные инструменты, подходы и приёмы.
На курсах «Профессии Python-разработчик» вы не только познакомитесь именно с такими инструментами, но и выработаете привычку к постоянному их поиску и совершенствованию. В этом, возможно, и заключается суть программирования. Приходите, и да пребудут с вами Дзен и Дух Пайтона!
Объединить все элементы списка в строку (с разделителем)
Есть массив данных parameters типа string. Нужно пройтись в цикле по каждой строке в массиве и присвоить новому параметру значение строки. Есть следующий код:
for string in parameters: glob_param, glob_param1, glob_param2, glob_param3, glob_param4 = string full_data = ('%(glob_param)s %(glob_param1)s %(glob_param2)s %(glob_param3)s %(glob_param4)s' % )
Проблема в том, что я каждый раз не знаю сколько параметров у меня будет в parameters , и соответственно сколько нужно glob_param . Нужно в цикле определить необходимое количество и выполнить присваивание.
Отслеживать
149k 12 12 золотых знаков 59 59 серебряных знаков 132 132 бронзовых знака
задан 5 мая 2018 в 12:06
23 1 1 золотой знак 1 1 серебряный знак 7 7 бронзовых знаков
приведите небольшой пример входных данных и то, что хотите получить на выходе.
5 мая 2018 в 12:08
у меня есть массив данных parameters , которые я получаю из базы данных и вывожу на экран. Нужно переприсвоить эти данные глобальной переменной full_data , чтобы потом, в другой функции я мог эти данные через full_data сохранить в PDF.
Переформатирование и слияние — Python: Numpy-массивы
Объединение данных в единую структуру — это операция, с которой сталкиваются при поступлении данных. С помощью нее мы можем объединять данные из разных источников, а также асинхронные ответы сервера и результаты параллельных и последовательных вычислений. В стандартном Python есть структуры данных list и set . Их можно объединять с помощью append() и update() . Еще можно использовать функцию zip() — она нужна для попарного объединения значений. В Numpy это работает по-другому.
Массивы numpy.ndarray поддерживают сценарии объединения массивов различной размерности по разным осям индексов. Для этого используются четыре метода:
- Конкатенация — concatenate()
- Объединение массивов по горизонтали — hstack()
- Объединение массивов по вертикали — vstack()
- Попарное объединение элементов списков — column_stack()
В этом уроке мы рассмотрим правила их применения и узнаем, какие нюансы нужно учитывать в работе с ними.
Одномерные структуры данных
Начнем с одномерных структур данных, потому что они встречаются чаще всего.
Объединение списков значений в Python делаются операцией + . В Numpy ту же роль выполняют методы concatenate() и hstack() :
import numpy as np arr1 = np.array([0, 1, 2, 3,]) arr2 = np.array([4, 5, 6, 7]) print(np.concatenate([arr1, arr2])) # => [0 1 2 3 4 5 6 7] print(np.hstack([arr1, arr2])) # => [0 1 2 3 4 5 6 7] print([0, 1, 2, 3,] + [4, 5, 6, 7]) # => [0, 1, 2, 3, 4, 5, 6, 7]
Обратите внимание, что в примере выше мы объединили массивы по горизонтали. Для этого мы использовали метод hstack() (сокращение от английского horisontal stack).
А теперь попробуем объединить массивы в вертикальном направлении. Здесь понадобится метод vstack() (от англ. vertical stack). Для вертикального объединения также подойдет инициализация нового массива из списка исходных массивов. Этот подход аналогичен формированию списка списков:
print(np.vstack([arr1, arr2])) # => [[0 1 2 3] # [4 5 6 7]] print(np.array([arr1, arr2])) # => [[0 1 2 3] # [4 5 6 7]] print([[0, 1, 2, 3,], [4, 5, 6, 7]]) # => [[0, 1, 2, 3], [4, 5, 6, 7]]
Еще одна удобная и распространенная операция — попарное объединение элементов списков. Как уже говорили, в стандартном Python для этой цели используется метод zip() .
В Numpy используется аналог — метод column_stack() :
print(list(zip([0, 1, 2, 3,], [4, 5, 6, 7]))) # => [(0, 4), (1, 5), (2, 6), (3, 7)] print(np.column_stack([arr1, arr2])) # => [[0 4] # [1 5] # [2 6] # [3 7]]
В итоге мы рассмотрели все четыре метода и выяснили, как они работают для одномерных массивов. Эти же знания применимы и к массивам с большей размерностью.
Двумерные структуры данных
Попробуем объединить двумерные структуры — матрицы. Это можно сделать в двух направлениях.
В этом примере мы объединим данные по вертикали:
arr1 = np.array([[5, 8], [8, 9]]) arr2 = np.array([[3, 1], [7, 2]]) print(np.concatenate([arr1, arr2])) # => [[5 8] # [8 9] # [3 1] # [7 2]] print(np.vstack([arr1, arr2])) # => [[5 8] # [8 9] # [3 1] # [7 2]]
Также можно объединять данные по горизонтали:
print(np.concatenate([arr1, arr2], axis = 1)) # => [[5 8 3 1] # [8 9 7 2]] print(np.hstack((arr1, arr2))) # => [[5 8 3 1] # [8 9 7 2]]
Все примеры выше демонстрировали объединение двух массивов. Однако массивов может быть больше.
Многомерные структуры данных
Предположим, что в результате асинхронных запросов к серверу было получено три списка значений для трех дней продаж магазина. Чтобы объединить ответы сервера в единую таблицу, можно использовать все те же методы:
response_values_day1 = np.array([7, 1, 7, 8]) response_values_day2 = np.array([4, 2, 4, 5]) response_values_day3 = np.array([3, 5, 2, 3]) orders = np.vstack([ response_values_day1, response_values_day2, response_values_day3, ]) print(orders) # => [[7 1 7 8] # [4 2 4 5] # [3 5 2 3]]
Запросы к серверу могут быть не по дням, а по магазинам. В этом случае также применимы методы объединения:
response_values_shop1 = np.array([ 7, 4, 3,]) response_values_shop2 = np.array([ 1, 2, 5,]) response_values_shop3 = np.array([ 7, 4, 2,]) response_values_shop4 = np.array([ 8, 5, 3,]) orders = np.vstack([ response_values_shop1, response_values_shop2, response_values_shop3, response_values_shop4, ]) print(orders.T) # => [[7 1 7 8] # [4 2 4 5] # [3 5 2 3]]
В примере выше используется транспонирование матрицы. Результат транспонирования — это матрица, в которой столбцы исходной таблицы становятся строками.
Посмотрим на исходную матрицу:
print(orders) # => [[7 4 3] # [1 2 5] # [7 4 2] # [8 5 3]]
А теперь сравним ее с транспонированной:
print(orders.T) # => [[7 1 7 8] # [4 2 4 5] # [3 5 2 3]]
Выводы
В этом уроке мы рассмотрели методы объединения массивов numpy.ndarray . Все методы работают для данных с разной размерностью: одномерными, двумерными и многомерными. При этом на вход методы могут получать любое количество массивов.
Чтобы выбрать правильный метод объединения, проговорите про себя, что нужно сделать:
Открыть доступ
Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно
- 130 курсов, 2000+ часов теории
- 1000 практических заданий в браузере
- 360 000 студентов
Наши выпускники работают в компаниях: