【发布时间】:2013-09-09 19:54:30
【问题描述】:
我需要在每个 N 元素的多行上打印我的列表,而不是将原始列表拆分为更小的列表。
例如,N = 3
鉴于此:
MY_LIST = [ 'A', 'B', 'C', 'D', 'E', 'F']
我想让 python 打印这个:
A B C
D E F
感谢您的帮助
【问题讨论】:
标签: python list printing split
我需要在每个 N 元素的多行上打印我的列表,而不是将原始列表拆分为更小的列表。
例如,N = 3
鉴于此:
MY_LIST = [ 'A', 'B', 'C', 'D', 'E', 'F']
我想让 python 打印这个:
A B C
D E F
感谢您的帮助
【问题讨论】:
标签: python list printing split
试试这个:
'\n'.join([' '.join(i) for i in zip(*[iter(MY_LIST)]*N)])
例子:
>>> MY_LIST = [ 'A', 'B', 'C', 'D', 'E', 'F']
>>> N=3
>>> '\n'.join([' '.join(i) for i in zip(*[iter(MY_LIST)]*N)])
'A B C\nD E F'
【讨论】:
len(MY_LIST) %3 != 0...
您可以使用itertools.islice 和生成器函数:
>>> import math
>>> from itertools import islice
def solve(lis, n):
it = iter(lis)
le = float(len(lis))
for _ in xrange(int(math.ceil(le/n))):
yield " ".join(islice(it, n))
>>> for x in solve([ 'A', 'B', 'C', 'D', 'E', 'F'], 3):
... print x
...
A B C
D E F
使用py3.x的print函数:
>>> from __future__ import print_function
>>> print(*solve([ 'A', 'B', 'C', 'D', 'E', 'F'], 3), sep='\n')
A B C
D E F
>>> print(*solve([ 'A', 'B', 'C', 'D', 'E', 'F', 'G'], 3), sep='\n')
A B C
D E F
G
【讨论】:
>>> for x in (MY_LIST[i:i + N] for i in xrange(0, len(MY_LIST), N)):
... print " ".join(x)
A B C
D E F
【讨论】: