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リスト、つまり 1 次元配列です。A[0]int添字付けできない です。したがって、あなたのエラー。

Python では、行列を 2 次元リストとして表現する方がより自然です。たとえば、次のようになります。

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 の 1 次元性に縛られている場合は、次のように出力できます。

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

Python の難点は、2 次元を使用してリストを指定できないことです。1 つのディメンションのみが許可されます。それで

A[0]=22

しかし

[0][1]

エラーをスローします。二重添え字を指定するには、辞書を使用できます

于 2013-03-27T01:39:25.010 に答える
0

何語?

関係なく、

あなたの入力は2次元配列であることを意図していると思いますが、それは1次元配列にすぎません。または、コードが1次元配列を処理して2次元に「見える」ようにすることを意図していること。

しかし、そのままでは、入力配列が 1 次元であるため、コードは存在しない 2 次元配列を処理しようとしています。

この回答で修正するのに十分でない場合は、元の質問に言語をタグとコードとして含めて (編集して)、@Sepster にコメントを追加してください。もう一度確認します。

EDIT:欠落したOPは、 A がリスト [22, 38, 30, 58, 34, 69] であると述べていました。

于 2013-03-27T01:40:38.587 に答える