2

私は一連のデータを持っています

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

これは、テンプレート化された Web サイトでは次のようになります

1  2  3  4
5  6  7  8
9  10

今、私は別のディスプレイに頭を包み込もうとしています-列を下ってn行を横切って

1  4  7  10
2  5  8  
3  6  9

これは Web テンプレート用であるため、次のデータのセットを生成する必要があります。

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

正直なところ、これにどのようにアプローチするのが最善かについて、私は完全に途方に暮れています。

4

2 に答える 2

2

長さを調整してから、再圧縮する必要があります。

>>> zip(*izip_longest(*[iter(data)]*3))
[(1, 4, 7, 10), (2, 5, 8, None), (3, 6, 9, None)]
于 2012-12-05T19:01:19.890 に答える
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)]

基本的に、それはあなたのものとまったく同じアルゴリズムを使用し、結果を転置します。

于 2012-12-05T18:58:05.070 に答える