Текст в виде колонок

 
0
 
Python
ava
KelmDmitry | 05.02.2011, 17:18
Есть некий список со словами. Слова в нем разной длины.
Его надо записать в файл в виде колонок, по 5 слов в каждой. Расстояние между колонками должно быть одинаково.

Пример.

templist = ['1. Петя','2. Сергей ','3. Яга','4. Сер','5. Ольга','6. Саша','','7. Оптимус',' 8. Мегатрон', и т.д.]


Что получается сейчас.
1. Петя 6. Саша
2. Сергей 7. Оптимус
3. Яга 8. Мегатрон
4. Сер
5. Ольга

А нужно чтобы стало:
  • 1. Петя 6. Саша 11.
  • 2. Сергей 7. Оптимус 12
  • 3. Яга 8. Мегатрон 13
  • 4. Сер 9. 14
  • 5. Ольга 10. 15. И тд.


Рабочий кусок кода

for n in range(5):
linelist = []
for n in templist[n:len(templist):5]:
w.write(n + ' ')
linelist.append(n)
# print linelist
w.write('\n')


Пока писал проблему додумался до одного решения. Но возможно ваш вариант будет более оптимален.
Заранее благодарю.
Kommentare (6)
ava
rsm | 06.02.2011, 00:45 #
Что-то навроде:


# -*- coding: utf8 -*-

from __future__ import print_function
from random import randint


def make_table(table, cols):

# считаем длину самой длинной строки
# чтобы потом красиво отформатировать по левому краю
#
max_len = len(max(table, key=len))

# выбираем из списка строки по cols элементов
#
for row in map(None, *([iter(table)] * cols)):

# слева направо по строке
#
for cell in row:

# непременно проверка, т.к. в последней строке несколько
# ячеек будут пустыми
#
if cell is not None:

# красиво форматируем по левому краю,
# разделяя столбцы табуляцией
#
print("{:<{:}}".format(cell, max_len), end='\t')

# перевод строки таблицы
#
print()


def main():

# новый список, будет таблицей
#
table = []

# число колонок
#
cols = randint(2, 5)

# заполняем произвольным бредом
#
for i in range(randint(cols, 100)):
table.append("{:03d}. {:}".format(i + 1, "nya" * randint(1, 5)))

# на печать
#
make_table(table, cols)


if __name__ == "__main__":
main()

Таблица форматируется слева направо сверху вниз. Пофикси как требуется.

P.S. На будущее: для подобных тем есть специальный раздел "Центр помощи" smile
ava
KelmDmitry | 07.02.2011, 04:31 #
К сожалению у меня нет 100 постов чтоб поставить +, поэтому лишь Большое спасибо!
Прочитав ваш код, не понял а зачем вы импортируете print_function?
Про раздел помощи спасибо, я его при просмотре форума даже и не заметил.
ava
KelmDmitry | 08.02.2011, 17:18 #
А на форуме есть раздел с книгами на Питоне?
То есть где перечислены все достойные книги для изучения. А то что-то найти не могу.
ava
rsm | 09.02.2011, 20:13 #
Цитата (KelmDmitry @ 7.2.2011, 06:31 findReferencedText)
зачем вы импортируете print_function?

Чтобы print была функцией, а не оператором (подробнее тут).

Цитата (KelmDmitry @ 8.2.2011, 19:18 findReferencedText)
А на форуме есть раздел с книгами на Питоне?

В самой непосредственной близости. Есть также специальная тема - ссылки в ней давно померли, но названия книг не изменились.
ava
KelmDmitry | 09.02.2011, 20:30 #
Спасибо, правда уважаемый rsm складывается ощущение что нас но форуме только двое ^^
ava
rsm | 10.02.2011, 21:32 #
Это бывает... smile
Registrieren Sie sich oder melden Sie sich an, um schreiben zu können.
Unternehmen des Tages
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Mitwirkende
  rsm   KelmDmitry
advanced
Absenden