如何打印python列表的元素看起来像矩阵



我让用户输入我的程序矩阵的程度(例如3x3 == x = 3,y = 3),然后填充9个值的列表,该列表将构成我的3x3像这样的矩阵:

    total = x * y  # the x and y values inputted by the user
    i = 1
    while i <= total:
        matrix.append(i)
        i += 1

我将这个矩阵填充后,我想将其打印出来,以便我在第一行等上打印值矩阵[0],[1],[2]。但是我想对任何尺寸的矩阵执行此操作,我尝试了以下方法:

i = 1
j = 0
while j < total:
    print matrix[j]
    if not i == x:
        print ''
        i += 1
    else:
        print 'n'
        i = 1
    j += 1

没有运气,因为它在新线路上打印每个值,无论如何...任何帮助,谢谢!

怎么样:

x = 3
y = 3
matrix = [[(i+1)+(j*x) for i in range(x)] for j in range(y)]
for row in matrix:
    print ' '.join(map(str, row))

打印:

1 2 3
4 5 6
7 8 9

编辑:正如评论中建议的那样,我们可以使最后一行更灵活,以显示适当的"矩阵"格式,如下所示:

for row in matrix:
    print ' '.join(s.rjust(len(str(x*y)), ' ') for s in map(str, row))

这意味着无论x和y的大小如何,我们始终将价值均匀地散布。例如,如果x=6y=6,它将打印:

 1  2  3  4  5  6
 7  8  9 10 11 12
13 14 15 16 17 18
19 20 21 22 23 24
25 26 27 28 29 30
31 32 33 34 35 36

如果x=10y=10它将打印:

  1   2   3   4   5   6   7   8   9  10
 11  12  13  14  15  16  17  18  19  20
 21  22  23  24  25  26  27  28  29  30
 31  32  33  34  35  36  37  38  39  40
 41  42  43  44  45  46  47  48  49  50
 51  52  53  54  55  56  57  58  59  60
 61  62  63  64  65  66  67  68  69  70
 71  72  73  74  75  76  77  78  79  80
 81  82  83  84  85  86  87  88  89  90
 91  92  93  94  95  96  97  98  99 100

等等。

您可以替换

print ""

print "",

为了不在末端添加新线。

另外,您可以使用Python 3打印功能,该功能支持该功能作为参数。为此,您应该导入 __未来__ ,并像函数一样调用 print 。请参见下面的代码:

from __future__ import print_function
print("my string", end = "")

您可以在文档页面上阅读有关使用打印作为函数的更多信息。

此答案基于此答案。该答案仅考虑了形状。为了使它看起来像一个矩阵,您可以使用盒子绘制字符。

c, x, y = 1, 3, 3
matrix = [[(i+1)+(j*x) for i in range(x)] for j in range(y)]
for row in matrix:
    if c == 1:
        print u'u250F', ' '.join(s.rjust(len(str(x*y)), ' ') for s in map(str, row)), u'u2513'
    elif c-y == 0:
        print u'u2517', ' '.join(s.rjust(len(str(x*y)), ' ') for s in map(str, row)), u'u251B'
    else:
        print u'u2503', ' '.join(s.rjust(len(str(x*y)), ' ') for s in map(str, row)), u'u2503'
    c += 1

另一种可能性是:

x, y = 3, 3
matrix = [[(i+1)+(j*x) for i in range(x)] for j in range(y)]
print u'u250F', ''.join(((2*x)-2)*' '), u'u2513'
for row in matrix:
    print u'u2503', ' '.join(s.rjust(len(str(x*y)), ' ') for s in map(str, row)), u'u2503'
print u'u2517', ''.join(((2*x)-2)*' '), u'u251B'

如果您想在cmd.exe中运行此问题,请参见此问题。

最新更新