Как преобразовать список в строку в Python
Рассказываем о методе join() и других полезных инструментах для конвертирования Python‑списков в строки.
![](https://248006.selcdn.ru/main/iblock/ce9/ce982593f41f8313a1d5a2796b54b35c/6a18bcdcad2227c0461cfca6d3230614.png)
![](https://248006.selcdn.ru/main/iblock/ce9/ce982593f41f8313a1d5a2796b54b35c/6a18bcdcad2227c0461cfca6d3230614.png)
Иллюстрация: Оля Ежак для Skillbox Media
В Python существует два основных способа сделать из списка строку: с помощью цикла и с помощью метода join(). У обоих есть нюансы, о которых мы сейчас расскажем.
Преобразование с помощью цикла
Более понятный для новичка, но и более громоздкий способ перевести список в строку — воспользоваться циклом. Если вы уже знаете его и просто хотите узнать более эффективный и быстрый метод, то сразу переходите к следующему разделу. А если нет, то давайте разбираться.
Как это работает: мы создаём пустую строку, потом с помощью цикла переберём каждый элемент списка и на каждой итерации будем добавлять к строке текущий элемент списка.
lst = ['Преобразование','через','цикл']
#Создаём пустую строку
string = ''
#По очереди добавляем к ней каждый элемент списка
for el in lst:
string += el
print(string)
>>> Преобразованиечерезцикл
Код в онлайн-интерпретаторе: https://trinket.io/python/7146bb558c
Однако такой код не будет работать, если в списке есть не только строки, но и, например, числа. Дело в том, что в Python нельзя смешивать данные разных типов.
Поэтому, перед тем как добавлять элемент в список, его нужно преобразовать в строку. Делается это с помощью функции str(). Добавим её в наш код.
#Создаём список, в котором есть как строки, так и цифры
lst = ['Преобразование','через','цикл', 2]
string = ''
for el in lst:
string += str(el) #Превращаем каждый элемент списка в строку
print(string)
>>> Преобразованиечерезцикл2
Код в онлайн-интерпретаторе: https://trinket.io/python/4982cbf618
Если нужно установить разделитель между строками, то для него нужно прописать отдельную строчку кода внутри цикла.
lst = ['Преобразование','через','цикл', 3]
string = ''
for el in lst:
#Добавляем к строке элемент списка
string += str(el)
#Добавляем к строке разделитель — в данном случае пробел
string += ' '
print(string)
>>> Преобразование через цикл 3
Код в онлайн-интерпретаторе: https://trinket.io/python/f72166a90b
Обратите внимание: раз мы добавляем разделитель на каждой итерации, пробел будет и после цифры 3 нашего последнего элемента. Это легко проверить, если вместо пробела добавлять какой-то другой, видимый символ.
Эту проблему можно решить — ещё больше усложнив код. Например, введя условие, которое проверяет, последний это элемент в списке или нет. Однако гораздо проще и удобнее превратить список в строку, используя встроенный метод join().
Преобразование с помощью метода join()
Метод join(), по сути, делает всё то же самое, что и наш цикл, но лучше, удобнее и занимает всего одну строку. Вот как его применяют:
string.join(lst)
В качестве аргумента lst он получает список, элементы которого и будет объединять в строку, а string — это разделитель. Если мы не хотим его устанавливать, то в качестве string нужно указать пустую строку.
Посмотрим, как join() применяется на практике.
lst = ['Преобразование', 'через', 'метод', 'join()']
#Объединяем элементы списка с пустым разделителем
print(''.join(lst))
>>> Преобразованиечерезметодjoin()
#Устанавливаем пробел в качестве разделителя
print(' '.join(lst))
>>> Преобразование через метод join()
Код в онлайн-интерпретаторе: https://trinket.io/python/70dfcc02e6
Заметили особенность? Разделители ставятся только между элементами, а не после каждого элемента, как было в нашем цикле. join() — умница. Однако и тут есть ахиллесова пята: если в списке встречаются нестроковые элементы, мы получим ошибку. Чтобы этого избежать, надо опять-таки сначала превратить все нестроки в строки. Сделать это можно двумя способами.
Использовать выражение-генератор
Выражение-генератор — это конструкция, которая позволяет провести операцию над каждым элементом списка. Оно возвращает генератор, с которым метод join() обращается точно так же, как и со списками.
lst = [1, 1.2, 'строка', False]
print(' '.join(str(el) for el in lst))
>>> 1 1.2 строка False
Код в онлайн-интерпретаторе: https://trinket.io/python/5ed8ff749c
Конструкция 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
Ссылка на онлайн-интерпретатор: https://trinket.io/python/11dceac18d
Конструкция map(str, lst) означает, что каждый элемент в списке lst будет превращён в строку с помощью функции str. Обратите внимание, что в качестве аргумента в map() передаётся только название функции, без скобок.
Итоги
Преобразовать список в строку можно с помощью цикла, но для этого есть и более удобный инструмент — метод join().
Если содержит нестроковые элементы, то их для начала придётся превратить в строки — иначе выскочит ошибка. Для этого можно воспользоваться выражением-генератором или функцией map().