我以方形形式打印矩阵的代码如下:
for i in range(len(A)):
line = "\t|"+str(A[i][0])
for j in range(1, len(A[i])):
line = line + "\t" + str(A[i][j])
line = line + "|"
print(line)
其中 A 是列表 [22, 38, 30, 58, 34, 69]
它应该看起来像
|22 38|
|30 58|
|34 69|
它不断返回 “int”对象不可下标 对于代码中的行:
line = "\t|"+str(A[i][0])
我该如何解决这个问题?
最佳答案
A
是一个列表——一个一维数组。 A[0]
是一个 int
,不可下标。因此你的错误。
在Python中将矩阵表示为二维列表更自然,例如:
A = [[22, 38], [30, 58], [34, 69]]
或
A = [[22, 30, 34], [38, 58, 69]]
如果你这样做,你的代码将会工作,尽管最好使用这样的代码:
def print_matrix(M):
for N in M:
print("|{}|".format('\t'.join(str(O) for O in N)))
print_matrix(A)
或者只是:
from pprint import pprint
pprint(A)
如果您受限于 A 的一维性,您可以像这样打印它:
def print_list_matrix(M, width):
for i, j in zip(range(0, len(M), width), range(skip, len(M)+width, width)):
print('|{}|'.format("\t".join(str(O) for O in M[i:j])))
或者像这样:
def print_list_matrix(M, width):
for i in range(0, len(M), width):
print('|{}|'.format("\t".join(str(O) for O in M[i:i+width])))
或者如果你想避免切片:
from itertools import izip
def grouper(seq, size):
iters = [iter(seq)] * size
return izip(*iters)
def print_list_matrix(M, width):
for N in grouper(M, width):
print('|{}|'.format("\t".join(str(O) for O in N)))
关于python - “int”对象不可下标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15650516/