python - “int”对象不可下标

标签 python matrix

我以方形形式打印矩阵的代码如下:

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/

相关文章:

python - 如何在 azureml 中记录绘图?

c++ - 从标准输入构建数组或矩阵

matlab - 小矩阵乘以大矩阵

c - 尝试打印指针值时出现堆异常

python - 将返回的 urlopen() 转换为 float

生成字符串旋转的 Pythonic 方式

python - SQLAlchemy column_property 基础知识

python - 使用 numpy 根据数组的条件索引创建矩阵

python - 在同一个图上一起绘制两个距离矩阵?

python - 如何使用 Tox/Py.test 显示完整的 Python Traceback