2012-12-05 44 views
2

我有一組數據Python的分組對於列顯示

data = (1,2,3,4,5,6,7,8,9,10) 

通常在蟒我將這些組爲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)) 

老實說,我完全喪失瞭如何最好的方法。

回答

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結果。

+0

'transpose' - 這就是我一直在尋找這個詞!非常感謝! –

+0

@JonathanVanasco:我的榮幸 – NPE

2

您需要調整的長度,然後重新壓縮它:

>>> zip(*izip_longest(*[iter(data)]*3)) 
[(1, 4, 7, 10), (2, 5, 8, None), (3, 6, 9, None)] 
+0

非常感謝! –