漂亮的印刷(2D阵列,盒子)

时间:2016-09-30 18:44:50

标签: python arrays multidimensional-array

我写了以下代码:

for row in range(len(listOfLists)):
    print('+' + '-+'*len(listOfLists))
    print('|', end='')
    for col in range(len(listOfLists[row])):
        print(listOfLists[row][col], end='|')
    print(' ') #To change lines 
print('+' + '-+'*len(listOfLists))

输入:

[['a', 'b', 'c'],
 ['d', 'e', 'f'],
 ['g', 'h', 'i'],
 ['j', 'k', 'l']]

输出:

+-+-+-+-+
|a|b|c| 
+-+-+-+-+
|d|e|f| 
+-+-+-+-+
|g|h|i| 
+-+-+-+-+
|j|k|l| 
+-+-+-+-+

期望的输出:

+-+-+-+
|a|b|c| 
+-+-+-+
|d|e|f| 
+-+-+-+
|g|h|i| 
+-+-+-+
|j|k|l| 
+-+-+-+

打印' + - +'围绕2D阵列的元素。 但是,我的代码仅适用于方阵(n ^ 2)。

如何概括它以使其适用于任何数组变体(只要所有列表长度相等)

谢谢

3 个答案:

答案 0 :(得分:2)

您的问题是len(listOfLists)在两个方向上都用于打印表的大小。 len(listOfLists)默认为行数,通过len(listOfLists[0])获得列数。

 listOfLists = [['a', 'b', 'c'],
     ['d', 'e', 'f'],
     ['g', 'h', 'i'],
     ['j', 'k', 'l']]

for row in range(len(listOfLists)):
    print('+' + '-+'*len(listOfLists[0]))
    print('|', end='')
    for col in range(len(listOfLists[row])):
        print(listOfLists[row][col], end='|')
    print(' ') #To change lines 
print('+' + '-+'*(len(listOfLists[0])))

输出:

+-+-+-+
|a|b|c| 
+-+-+-+
|d|e|f| 
+-+-+-+
|g|h|i| 
+-+-+-+
|j|k|l| 
+-+-+-+

快乐的编码!

答案 1 :(得分:2)

您正在根据行数而不是列数打印此分隔符。使用其他测试用例有助于立即调试。

def printListOfLists(listOfLists):
    for row in range(len(listOfLists)):
        print('+' + '-+' * len(listOfLists[0]))
        print('|', end='')
        for col in range(len(listOfLists[row])):
            print(listOfLists[row][col], end='|')
        print(' ')  # To change lines
    print('+' + '-+' * len(listOfLists[0]))


printListOfLists([
    ['a', 'b', 'c'],
    ['d', 'e', 'f'],
    ['g', 'h', 'i'],
    ['j', 'k', 'l']
])

printListOfLists([['a', 'b', 'c']])

printListOfLists([['a'], ['b'], ['c']])

现在预期所有产生的结果:

+-+-+-+
|a|b|c| 
+-+-+-+
|d|e|f| 
+-+-+-+
|g|h|i| 
+-+-+-+
|j|k|l| 
+-+-+-+


+-+-+-+
|a|b|c| 
+-+-+-+


+-+
|a| 
+-+
|b| 
+-+
|c| 
+-+

答案 2 :(得分:1)

def awesome_print(listOfLists):
    for row in range(len(listOfLists)):
        print('+' + '-+'*len(listOfLists[row]))
        print('|', end='')
        for col in range(len(listOfLists[row])):
            print(listOfLists[row][col], end='|')
        print(' ') #To change lines 
    print('+' + '-+'*len(listOfLists[row]))

awesome_print([[1,2,3], [1,2,3], [2,3,0], [2,3,4]])

输出

+-+-+-+
|1|2|3| 
+-+-+-+
|1|2|3| 
+-+-+-+
|2|3|0| 
+-+-+-+
|2|3|4| 
+-+-+-+

如果您需要打印具有非固定大小的子阵列的数据

def awesome_print2(listOfLists):
    for row in range(len(listOfLists)):
        print('+' + '-+'*len(listOfLists[row]))
        print('|', end='')
        for col in range(len(listOfLists[row])):
            print(listOfLists[row][col], end='|')
        print()
        print('+' + '-+'*len(listOfLists[row]))
awesome_print2([[1,2,3,5], [1,2,3], [2,3,0,6,3], [2,3,4]])

输出:

+-+-+-+-+
|1|2|3|5|
+-+-+-+-+
+-+-+-+
|1|2|3|
+-+-+-+
+-+-+-+-+-+
|2|3|0|6|3|
+-+-+-+-+-+
+-+-+-+
|2|3|4|
+-+-+-+