Python обернуть / отформатировать список при печати - PullRequest
1 голос
/ 14 марта 2012

В Python 2.7 у меня есть список, содержащий строки чисел 1-25 (например). При их печати я хочу, чтобы список печатался на 5 строках, по 5 чисел в строке.

В идеале:

>>> print(myList)
['1', '2', '3', '4', '5'
 '6', '7', '8', '9', '10',
 ...
 ...
 '21', '22', '23', '24', '25']

Я знаю, что если нужно, я могу просто создать пять отдельных списков в myList и вызвать

print(myList[0])
print(myList[1])
...

но я бы очень хотел этого избежать.

Заранее спасибо!

Ответы [ 6 ]

2 голосов
/ 14 марта 2012

Вам придется свернуть свою собственную функцию представления, например

def wrap_list(lst, items_per_line=5):
    lines = []
    for i in range(0, len(lst), items_per_line):
        chunk = lst[i:i + items_per_line]
        line = ", ".join("{!r}".format(x) for x in chunk)
        lines.append(line)
    return "[" + ",\n ".join(lines) + "]"

Пример использования:

>>> print wrap_list(map(str, range(25)))
['0', '1', '2', '3', '4',
 '5', '6', '7', '8', '9',
 '10', '11', '12', '13', '14',
 '15', '16', '17', '18', '19',
 '20', '21', '22', '23', '24']
1 голос
/ 14 марта 2012

Вот решение без излишеств, которое использует цикл for:

for n, val in enumerate(myList, 1):
    print val,
    if n % 5 == 0:
        print "\n"
if n % 5:
    print "\n" # end the last line, if any

Перечисление начинается с 1, чтобы избежать случайного перехода на новую строку в начале.

0 голосов
/ 10 августа 2013

Стандартная библиотека Python предоставляет textwrap, который можно использовать как:

from textwrap import fill
myList = [str(x) for x in range(25) ]
print(fill(str(myList), width=20) )
0 голосов
/ 14 мая 2012

Я видел это и хотел написать один уродливый однострочник, так что вот оно:

>>> l = range(25)
>>> w = 5
>>> print '\n'.join([str(x) for x in [l[i:i + w] for i in range(0, 25, w)]])
[0, 1, 2, 3, 4]
[5, 6, 7, 8, 9]
[10, 11, 12, 13, 14]
[15, 16, 17, 18, 19]
[20, 21, 22, 23, 24]

Примите это просто как идею

0 голосов
/ 14 марта 2012

Я не думаю, что есть какая-либо готовая функция для этой цели, вам, вероятно, все еще нужно разделить исходный список или написать свою собственную функцию печати.Существует простое решение, разделив исходный список:

import pprint
pprint.pprint([l[i:i+5] for i in xrange(0, len(l), 5)])

Однако он работает только со списками, длина которых равна 5 раз (или любым другим целым числам, указанным в вашей собственной версии), он не можетобрабатывать списки произвольной длины.Вам, вероятно, понадобится ваша собственная функция печати для этого случая.

0 голосов
/ 14 марта 2012

Вот один из вас:

for i in range(len(myList)):
    if i != 0 and i % (len(myList)/numOfLines) == 0: 
        print '\n'
    print myList[i],
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...