0

私がやっていることは本当にばかげているに違いありませんが、ここで何がうまくいかないのかわかりません。私は中間の python ユーザーです。

特定の 2D マトリックスを 90 度回転させるロジックを作成しました。かなり単純なロジック。興味深いのは、マトリックスが実際に回転することですが、印刷しようとすると、一貫して最後の行のみが印刷されます。

ロジックは次のとおりです。

def mat_rot(X):
    m = len(X)
    n = len(X[0])
    Xr = [[0]*m]*n
    for k in range(n):  # label: core_logic_for_loop
        for l in range(m):
            Xr[k][l] = X[m-1-l][k]

    m = len(Xr)
    n = len(Xr[0])
    for i in range(m):  # label: print_for_loop
        for j in range(n):
            sys.stdout.write(" i=%s j=%s, Xr=%s " %(i, j,Xr[i][j]))
        print " "
    return

[[a,b,c],[d,e,f]] のような行列を指定すると、[[d,a],[e,b],[f,c] として出力されるはずです。 ]

ここに私が直面している興味深い問題があります。core_logic_for_loop に必要な正確な値が含まれていることがわかります。for ループ内の要素を出力して確認しました。

しかし、print_for_loopに到達して値を出力するまでに、常に最後の行を取得するため、出力は次のようになります。

d a
e b
f c

私は得る:

f c
f c
f c

ここで何がうまくいかないのか理解していないようです:(

4

2 に答える 2

4

ここで使用できzipます:

>>> lis = [['a','b','c'],['d','e','f']]
>>> [ x[::-1] for x in zip(*lis) ]
[('d', 'a'), ('e', 'b'), ('f', 'c')]

#or
>>> [ list(reversed(x)) for x in zip(*lis)]
[['d', 'a'], ['e', 'b'], ['f', 'c']]
于 2013-06-12T20:16:53.533 に答える
2

あなたがするとき

Xr = [[0]*m]*n

実際には、同じリストへの参照をいくつか取得しています。

m = 2
n = 2
Xr = [[0]*m]*n
print Xr
# [[0, 0], [0, 0]]
Xr[0][0] = 1
print Xr
# [[1, 0], [1, 0]]

一つ変われば全部変わる。

于 2013-06-12T20:23:42.557 に答える