2013-07-25 108 views
11

我必须打印在5x5的阵列此Python代码数组应该是这样的二维数组:打印在python

0 1 4 (infinity) 3 
1 0 2 (infinity) 4 
4 2 0 1   5 
(inf)(inf) 1 0 3 
3 4 5 3  0 

谁能帮我打印此表?使用指数。

for k in range(n): 
     for i in range(n): 
      for j in range(n): 
       if A[i][k]+A[k][j]<A[i][j]: 
        A[i][j]=A[i][k]+A[k][j] 
+0

你是故意使用'j'作为两个嵌套循环递增变量? – Kudzu

+0

控制数组中每个项目的价值的数学公式是什么? – inspectorG4dget

+1

谢谢你接受我的错误。我的意思是ti使用“我” – user2548833

回答

1

我用numpy来生成数组,但列表数组应该类似地工作。

import numpy as np 
def printArray(args): 
    print "\t".join(args) 

n = 10 

Array = np.zeros(shape=(n,n)).astype('int') 

for row in Array: 
    printArray([str(x) for x in row]) 

如果你只想打印某些指标:

import numpy as np 
def printArray(args): 
    print "\t".join(args) 

n = 10 

Array = np.zeros(shape=(n,n)).astype('int') 

i_indices = [1,2,3] 
j_indices = [2,3,4] 

for i in i_indices:printArray([str(Array[i][j]) for j in j_indices]) 
+0

有没有使用索引的方法? – user2548833

+0

我不确定这是否是这个特定问题的最佳解决方案(因为它没有专门处理数组结构),但您也可以执行如下操作:'def print_join(* args): print“\ t “.join(在args中为str(arg)表示arg)'。然后它可以扩展到任意数量的参数,而不是固定在5. – Marius

+0

@Marius O:好点。 – sihrc

32

list comprehensionsstr joins组合可以做的工作:

inf = float('inf') 
A = [[0,1,4,inf,3], 
    [1,0,2,inf,4], 
    [4,2,0,1,5], 
    [inf,inf,1,0,3], 
    [3,4,5,3,0]] 

print('\n'.join([''.join(['{:4}'.format(item) for item in row]) 
     for row in A])) 

产生

0 1 4 inf 3 
    1 0 2 inf 4 
    4 2 0 1 5 
inf inf 1 0 3 
    3 4 5 3 0 

使用带索引的for循环在Python中通常是可以避免的,并且不被认为是“Pythonic”,因为它比Pythonic堂兄(见下文)可读性差。但是,你可以这样做:

for i in range(n): 
    for j in range(n): 
     print '{:4}'.format(A[i][j]), 
    print 

的更Python表姐是:

for row in A: 
    for val in row: 
     print '{:4}'.format(val), 
    print 

不过,这款采用30个打印报表,而我原来的答复只使用一个。

+0

我需要能够使用给定的循环。有谁知道如何做到这一点?我想将更大的for循环合并到我正在处理的程序中,但我想使用索引。 – user2548833

0

使用指数,循环和格式:

import numpy as np 

def printMatrix(a): 
    print "Matrix["+("%d" %a.shape[0])+"]["+("%d" %a.shape[1])+"]" 
    rows = a.shape[0] 
    cols = a.shape[1] 
    for i in range(0,rows): 
     for j in range(0,cols): 
     print "%6.f" %a[i,j], 
     print 
    print  


def printMatrixE(a): 
    print "Matrix["+("%d" %a.shape[0])+"]["+("%d" %a.shape[1])+"]" 
    rows = a.shape[0] 
    cols = a.shape[1] 
    for i in range(0,rows): 
     for j in range(0,cols): 
     print("%6.3f" %a[i,j]), 
     print 
    print  


inf = float('inf') 
A = np.array([[0,1.,4.,inf,3], 
    [1,0,2,inf,4], 
    [4,2,0,1,5], 
    [inf,inf,1,0,3], 
    [3,4,5,3,0]]) 

printMatrix(A)  
printMatrixE(A)  

其产生的输出:

Matrix[5][5] 
    0  1  4 inf  3 
    1  0  2 inf  4 
    4  2  0  1  5 
    inf inf  1  0  3 
    3  4  5  3  0 

Matrix[5][5] 
0.000 1.000 4.000 inf 3.000 
1.000 0.000 2.000 inf 4.000 
4.000 2.000 0.000 1.000 5.000 
    inf inf 1.000 0.000 3.000 
3.000 4.000 5.000 3.000 0.000 
17

总有最简单的方式。

import numpy as np 
print(np.matrix(A)) 
+1

好像在您的某些文章中重复的解决方案 – Ian

+1

迄今为止最好的答案,让我们不要重复发明轮子 –

+3

矩阵不是轮子 – Flint

0
print(mat.__str__()) 

其中垫是可变的,关于你的Matrix对象