Построчный вывод части списка
Мне нужно выводить строку слов из списка слов на экран так, чтобы каждое слово в строке было цельным, при этом длина строки, которая будет выведена, не должна превышать 40 символов. Вывести весь список слов построчно.
Например:
words = ['Привет', 'Хорошо', 'Классно', 'Автомобильный', 'Слова', 'Строка', 'Идентификация', 'Книга']
Вывод:
Привет Хорошо Классно Автомобильный
Cлова Строка Идентификация
Я нашел лишь такой способ, но при нем не учитываются пробелы между словами и вывод такой:
for index, _ in enumerate(str(words)):
line = str(words)[index * 40:(index + 1) * 40]
print(line)
# Вывод:
['Привет', 'Хорошо', 'Классно', 'Автомоб
иль', 'Слова', 'Строка']
Ответы (3 шт):
Просто берите и считайте символы в строке + добавляемое слово + пробел
Вышли за ограничение, выводите и заново добавляйте.
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
Слова обрабатываются последовательно и сразу же печатаются. Обработка первого слова безусловная. При обработке остальных слов требуется решать, что печатать перед словом: пробел или перевод строки:
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()
import textwrap
words = ['Привет', 'Хорошо', 'Классно', 'Автомобильный', 'Слова', 'Строка',
'Идентификация','Книга']
str_of_words = " ".join(words)
print(textwrap.fill(str_of_words, width=40))
Вывод:
Привет Хорошо Классно Автомобильный Слова Строка Идентификация Книга
Объяснение:
Для таких задач подходит стандартный модуль textwrap
- см. textwrap — Обёртывание и заполнение текста.
Сначала сделаем из вашего списка одну строку методом
.join()
- см. Преобразование списка в строку методом join.Затем к этой строке применим функцию
fill()
модуляtextwrap
с ключевым параметромwidth=
, в котором задаем максимальную длину.