Построчный вывод части списка

Мне нужно выводить строку слов из списка слов на экран так, чтобы каждое слово в строке было цельным, при этом длина строки, которая будет выведена, не должна превышать 40 символов. Вывести весь список слов построчно.

Например:

words = ['Привет', 'Хорошо', 'Классно', 'Автомобильный', 'Слова', 'Строка', 'Идентификация', 'Книга']

Вывод:

Привет Хорошо Классно Автомобильный 
Cлова Строка Идентификация

Я нашел лишь такой способ, но при нем не учитываются пробелы между словами и вывод такой:

for index, _ in enumerate(str(words)):
    line = str(words)[index * 40:(index + 1) * 40]
    print(line)

# Вывод: 
['Привет', 'Хорошо', 'Классно', 'Автомоб
иль', 'Слова', 'Строка']

Ответы (3 шт):

Автор решения: SwaD

Просто берите и считайте символы в строке + добавляемое слово + пробел

Вышли за ограничение, выводите и заново добавляйте.

words = ['Привет', 'Хорошо', 'Классно', 'Автомобильный', 'Слова', 'Строка', 'Идентификация', 'Книга']

letterInString = 40 # Ограничение длины выводимой строки
stringToPrint = '' # переменная для объеденения слов

for letter in words:
    if len(stringToPrint) + len(letter) + 1 <= letterInString:
        stringToPrint += letter + ' '
    else:
        print(stringToPrint) # Печатаем стороку
        stringToPrint = letter + ' '
        
print(stringToPrint) # Печатаем остаток

Если длина строки не должна учитывать последний пробел, то из условия if стоит убрать + 1

→ Ссылка
Автор решения: Stanislav Volodarskiy

Слова обрабатываются последовательно и сразу же печатаются. Обработка первого слова безусловная. При обработке остальных слов требуется решать, что печатать перед словом: пробел или перевод строки:

def print_wrap(seq, width):
    it = iter(seq)

    for word in it:                # обработка первого слова
        print(word, end='')
        space = width - len(word)  # остаток места в строке
        break

    for word in it:                # обработка всех остальных слов
        size = len(word)
        if size < space:
            print('', word, end='')
            space -= size + 1
        else:
            print('', word, sep='\n', end='')
            space = width - size

    print()
→ Ссылка
Автор решения: MarianD
import textwrap

words = ['Привет', 'Хорошо', 'Классно', 'Автомобильный', 'Слова', 'Строка', 
          'Идентификация','Книга']

str_of_words = " ".join(words)
print(textwrap.fill(str_of_words, width=40))

Вывод:

Привет Хорошо Классно Автомобильный
Слова Строка Идентификация Книга

Объяснение:

Для таких задач подходит стандартный модуль textwrap - см. textwrap — Обёртывание и заполнение текста.

  1. Сначала сделаем из вашего списка одну строку методом .join() - см. Преобразование списка в строку методом join.

  2. Затем к этой строке применим функцию fill() модуля textwrap с ключевым параметром width=, в котором задаем максимальную длину.

→ Ссылка