Код
#статьи

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

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

Иллюстрация: Оля Ежак для 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().

Изучайте IT на практике — бесплатно

Курсы за 2990 0 р.

Я не знаю, с чего начать
Научитесь: Профессия Python-разработчик Узнать больше
Понравилась статья?
Да

Пользуясь нашим сайтом, вы соглашаетесь с тем, что мы используем cookies 🍪

Ссылка скопирована