← Все вопросы

Как объединить элементы списка в одну строку в Python?

Задан 23 месяца назад767 просмотров2 ответа
8

У меня список слов, и я хочу склеить их в одну строку через пробел (или через запятую). Пробую складывать через +, выходит коряво. Как правильно собрать список в строку?

2 ответа

13
✓ Принятый ответ — помог автору

Правильный инструмент — метод join. Он вызывается у строки-разделителя, а список передаётся в скобках:

words = ['привет', 'как', 'дела']

print(' '.join(words))    # 'привет как дела'
print(', '.join(words))   # 'привет, как дела'
print(''.join(words))     # 'приветкакдела' — без разделителя

Логика непривычная, но запоминается: разделитель «соединяет» элементы, поэтому он слева — 'разделитель'.join(список), а не список.join('разделитель').

Главная ловушка — join склеивает только строки. Если в списке числа, будет TypeError: sequence item 0: expected str, not int. Сначала превратите элементы в строки:

nums = [1, 2, 3]
print('-'.join(str(x) for x in nums))   # '1-2-3'

Здесь генератор str(x) for x in nums на лету конвертирует числа.

Почему не через +: складывать строки в цикле (s = s + word) и неудобно (нужно вручную вставлять пробелы), и медленно на больших списках — каждая операция создаёт новую строку. join делает всё за один проход и оптимизирован.

И обратная операция — split(): 'привет как дела'.split() вернёт список слов. split и join — пара противоположностей.

4

Если нужно склеить с переводами строк (каждый элемент на своей строке), разделителем будет '\n':

lines = ['строка1', 'строка2', 'строка3']
text = '\n'.join(lines)
print(text)

Это, кстати, удобный способ подготовить текст для записи в файл одним f.write(text). И ещё: если элементы могут быть разных типов, безопаснее сразу '\n'.join(map(str, lines)), чтобы join не споткнулся на числе.

Ваш ответ

, чтобы ответить на вопрос.