2010-03-22 80 views
4

我有一個項目的名單按字母順序排序:顯示的項目列表中垂直表,而不是horizo​​nally

mylist = [a,b,c,d,e,f,g,h,i,j] 

我能夠輸出列表在HTML表格horizo​​nally像這樣:

| a , b , c , d | 
| e , f , g , h | 
| i , j , , | 

什麼是算法來垂直創建表是這樣的:

| a , d , g , j | 
| b , e , h , | 
| c , f , i , | 

我使用Python,但你答案可以是任何語言,甚至是僞代碼。

+2

這是一個好主意,不使用'list'作爲變量名。它影響內置 – 2010-03-22 21:30:01

回答

9
>>> l = [1,2,3,4,5,6,7,8,9,10] 
>>> [l[i::3] for i in xrange(3)] 
[[1, 4, 7, 10], [2, 5, 8], [3, 6, 9]] 

由你想要的結果的行數替換3

>>> [l[i::5] for i in xrange(5)] 
[[1, 6], [2, 7], [3, 8], [4, 9], [5, 10]] 
+0

非常優雅的解決方案! – mojbro 2010-03-22 19:40:27

+0

@vishvananda:不,這兩個數字都是生成的行數。我已經添加了另一個例子。 – balpha 2010-03-22 20:21:34

+0

你當然是正確的。我的大腦未能正確解析數組切片:)。這就是我沒有檢查出殼 – vishvananda 2010-03-22 20:29:06

0

這裏是一個可行的粗溶液(打印數從0到N-1含):

import math 

NROWS = 3 
N = 22 

for nr in xrange(NROWS): 
    for nc in xrange(int(math.ceil(1.0 * N/NROWS))): 
     num = nc * NROWS + nr 
     if num < N: 
      print num, 
    print '' 

這只是打印數字,例如與NROWS = 3N = 22

0 3 6 9 12 15 18 21 
1 4 7 10 13 16 19 
2 5 8 11 14 17 20 

可以輕鬆適應打印任何你想要的東西,並添加所需的格式。

0
int array_size = 26; 
int col_size = 4; 

for (int i = 0; i <= array_size/col_size; ++i) { 
    for (int j = i; j < array_size; j += col_size-1) { 
     print (a[j]); 
    } 
    print("\n"); 
} 
0

這是我想做到這一點。給定l(整數,在這個例子中)的列表。

  • 決定列(或行)的數目和,
  • 計算所需的行(或列)的數目。
  • 然後循環遍歷它們,逐行打印相應的值。

見下面的代碼:

import math 
l = [0,1,2,3,4,5,6,7,8,9] 
num_cols=4 
num_rows=int(math.ceil(1.0*len(l)/num_cols)) 

for r in range(num_rows): 
    for c in range(num_cols): 
     i = num_rows*c + r 
     if i<len(l): 
      print '%3d ' % l[i], 
     else: 
      print ' - ', # no value 
    print # linebreak 

最佳,

菲利普

1
import itertools 
def grouper(n, iterable, fillvalue=None): 
    # Source: http://docs.python.org/library/itertools.html#recipes 
    "grouper(3, 'ABCDEFG', 'x') --> ABC DEF Gxx" 
    return itertools.izip_longest(*[iter(iterable)]*n,fillvalue=fillvalue) 

def format_table(L): 
    result=[] 
    for row in L: 
     result.append('| '+', '.join(row)+' |') 
    return '\n'.join(result) 

L = ['a','b','c','d','e','f','g','h','i','j'] 
L_in_rows=list(grouper(3,L,fillvalue=' ')) 
L_in_columns=zip(*L_in_rows) 
print(format_table(L_in_columns)) 
# | a, d, g, j | 
# | b, e, h, | 
# | c, f, i, | 
+0

我喜歡這個,+1 – 2010-03-22 20:34:26

0
>>> import numpy as np 
>>> L=['a','b','c','d','e','f','g','h','i','j'] 
>>> width=4 
>>> height = (len(L)-1)/width+1 
>>> L=L+[' ']*(width*height-len(L)) #Pad to be even multiple of width 
>>> A = np.array([L]) 
>>> A.shape=(width,height) 
>>> A.transpose() 
array([['a', 'd', 'g', 'j'], 
     ['b', 'e', 'h', ' '], 
     ['c', 'f', 'i', ' ']], 
     dtype='|S1')