Python打印时包装/格式化列表

时间:2012-03-13 21:31:14

标签: python list formatting python-2.7

在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 个答案:

答案 0 :(得分:2)

您必须滚动自己的表示功能,例如

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 :(得分:1)

这是一个使用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开始,以避免在开始时出现错误的换行符。

答案 2 :(得分:0)

我认为没有任何现成的功能用于此目的,您可能仍需要拆分原始列表,或编写自己的打印功能。通过拆分原始列表有一个简单的解决方案:

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

但是,它仅适用于长度为5的列表(或您在自己的版本中指定的任何其他整数),它无法处理任意长度的列表。对于那种情况,您可能需要自己的打印功能。

答案 3 :(得分:0)

我看到了这个,想写一个丑陋的单行,所以这里是:

>>> 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]

把它作为一个想法

答案 4 :(得分:0)

Python标准库提供textwrap,您可以将其用作:

from textwrap import fill
myList = [str(x) for x in range(25) ]
print(fill(str(myList), width=20) )

答案 5 :(得分:-1)

以下是你们中的一位:

for i in range(len(myList)):
    if i != 0 and i % (len(myList)/numOfLines) == 0: 
        print '\n'
    print myList[i],