2016-11-29 79 views
0

所以我有一个列表L.如何使一个列表的列表显示垂直

L = [[1],[2,3],[3,4,5]] 

我将如何去,使它看起来像这样。

1 2 3 
    3 4 
     5 

我希望这能够迭代。 我认为最好的方法是嵌套循环,但我对从何处开始感到困惑。

编辑***

我设法让一些类似于什么我想做的事情。

L = [[1],[2,3],[3,4,5],[]] 
max_list= [] 

maxlen=max(len(l) for l in L) 
for row in range(maxlen): 
    max_list.append([]) 
    for col in tab: 
     try: 
      max_list[row].append(col[row]) 
     except: 
      max_list[row].append('') 
for col in max_list: 
    print(col) 

输出:

[1, 2, 3, ''] 
['', 3, 4, ''] 
['', '', 5, ''] 

至于现在我将如何对其进行格式化,以

1 2 3 
    3 4 
     5 

回答

2

解决方案并不那么优雅,代码太多......

L = [[1],[2,3],[3,4,5]] 
max_length = max(map(len, L)) # finding max length 
output = zip(*map(lambda x: x + [' '] * (max_length - len(x)), L)) # filling every sublist with ' ' to max_length and then zipping it 
for i in output: print(*i) # printing whole result 

输出:

1 2 3 
    3 4 
    5 

所以第3行是不是很明显,我将它分解

>>> list(map(lambda x: x + [' '] * (max_length - len(x)), L)) 
[[1, ' ', ' '], [2, 3, ' '], [3, 4, 5]] 
>>> list(zip(*map(lambda x: x + [' '] * (max_length - len(x)), L))) 
[(1, 2, 3), (' ', 3, 4), (' ', ' ', 5)] 

UPDATE

为了延长您需要提供关键字参数sepprint功能的空间:for i in output: print(*i, sep= ' ')

+0

谢谢。这可能是一个愚蠢的问题,但是有没有办法延长列间的空间。 – user3362571

+0

@ user3362571我已更新答案。 –

+1

非常感谢你的改变! – user3362571

0

假设你只是想打印该格式,这个怎么样代码:

L = [[1],[2,3],[3,4,5]] 


#1 2 3 
# 3 4 
#  5 

for i in range(len(L)): 
    for lst in L: 
    if (i == 0): 
     print (lst[0], end='') 
    if (i == 1 and len(lst)>1): 
     print (lst[1], end='') 
    if (i == 2 and len(lst)>2): 
     print (lst[2], end='') 
    print ('\n') 

它只有我窝rks为这个特定的情况,其中L = [[1],[2,3],[3,4,5]]但它打印所需的输出。

+0

这只是一个例子。但感谢您的帮助! – user3362571