1

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

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])

我该如何解决?

4

4 回答 4

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)))
于 2013-03-27T01:42:48.017 回答
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]))
于 2013-03-27T01:45:06.160 回答
0

什么语言?

不管,

我假设您的输入是一个二维数组,但它只是一个一维数组。或者您的代码旨在处理一维数组以使其“看起来”二维。

但实际上,您的代码正在尝试处理一个不存在的二维数组,因为您的输入数组是一维的。

如果这个答案没有给你足够的纠正,那么请将语言作为标签和代码包含在你的原始问题中(编辑它),然后向@Sepster 添加评论,我会再看一遍。

编辑:错过的 OP 已经说明A 是列表 [22, 38, 30, 58, 34, 69]

于 2013-03-27T01:40:38.587 回答
0

python的困难在于你不能使用二维来指定列表。只允许一个维度。所以

A[0]=22

A[0][1]

抛出错误。要指定双下标,可以使用字典

于 2013-03-27T01:39:25.010 回答