我有一组数据
data = (1,2,3,4,5,6,7,8,9,10)
通常在python中我会将它们分组,以便在n
列的行中显示:
cols = 4
grouped = izip_longest(*(iter(data),)*cols)
这给了我一个很棒的行显示:
grouped = ( (1,2,3,4), (5,6,7,8), (9,10,None,None) )
,在模板化的网站上,看起来像
1 2 3 4
5 6 7 8
9 10
现在我正试图将我的头围绕在另一个显示器上 - 沿着列和&跨越n
行
1 4 7 10
2 5 8
3 6 9
因为这是用于网页模板化的,我需要生成一组这样的数据:
grouped = ( (1,4,7,10), (2,5,8,None), (3,6,9,None) )
老实说,我完全不知道如何最好地接近这一点。
答案 0 :(得分:2)
您只需拨打zip()
:
In [10]: rows = 3
In [11]: zip(*itertools.izip_longest(*(iter(data),)*rows))
Out[11]: [(1, 4, 7, 10), (2, 5, 8, None), (3, 6, 9, None)]
基本上,它使用与您完全相同的算法,然后transposes结果。
答案 1 :(得分:2)
您需要调整长度,然后重新压缩它:
>>> zip(*izip_longest(*[iter(data)]*3))
[(1, 4, 7, 10), (2, 5, 8, None), (3, 6, 9, None)]