我以方形打印矩阵的代码如下:
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])
我该如何解决这个问题?
答案 0 :(得分:2)
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)))
答案 1 :(得分:1)
问题是你试图使用普通列表作为矩阵,你可以使它不明白或使用正确的索引。例如,您可以尝试这样的事情:
A = [22, 38, 30, 58, 34, 69]
size = 2 # put here the exact number of values within each row you want
for i in range(0, len(A), size):
print '\t'.join(map(str, res[i:i+size]))
答案 2 :(得分:0)
python的难点在于你不能使用二维来指定列表。只允许一个维度。所以
A [0] = 22
但是
A [0] [1]
抛出错误。要指定双下标,可以使用词典
答案 3 :(得分:0)
用什么语言?
无论如何,
我假设您的输入意味着是一个二维数组,但它只是一维数组。或者你的代码意味着来处理一维数组,使其“看起来”二维。
但事实上,你的代码正在尝试处理一个不存在的二维数组,因为你的输入数组是1维的。
如果这个答案没有给你足够的答案,那么请将语言作为标签和代码包含在原始问题中(编辑它),然后在@Sepster中添加注释,我会再看一遍。
编辑:错过OP已声明其中A是列表[22,38,30,58,34,69] 。