0

親愛なる私はプログラミングが初めてで、Pythonを使用しています。

次のコードがあります。

P=[]
i=0
j=0

P=[[0]*5]*5
while i<5:
    for j in range(0,5):
        P[i][j]=i-j
    i=i+1
print(P)

そして、次の出力が期待されます。

[[0, -1, -2,-3, -4], [1, 0, -1, -2, -3], [2, 1, 0, -1, -2], [3, 2 , 1, 0, -1], [4, 3, 2, 1, 0]]

行番号と列の違いをセルに保持したいので。

プログラムは次の出力を提供します。

[[4, 3, 2, 1, 0], [4, 3, 2, 1, 0], [4, 3, 2, 1, 0], [4, 3, 2, 1, 0], [ 4、3、2、1、0]]

助けてくれてありがとう!

4

1 に答える 1

3

[[0]*5]*5リストの 5 つのコピーを作成します[0, 0, 0, 0, 0]mapこれは、とを使用して確認できますid

>>> list(map(id, [[0]*5]*5))
[58739912, 58739912, 58739912, 58739912, 58739912]

それぞれの値が同一であることに注意してください。これは、これらのリストのいずれかを変更するたびに、すべてのリストが変更されることを意味します。

これに対する簡単な解決策は、リスト内包表記を使用することです。

P = [[0]*5 for i in range(5)]

この問題は、リストなどの変更可能なオブジェクトでのみ発生することに注意してください。したがって、整数では問題ありません。


補足として、この問題はもっと簡単な方法で解決できます。

>>> P = [[i for i in range(j, j-5, -1)] for j in range(5)]
>>> P
[[0, -1, -2, -3, -4], [1, 0, -1, -2, -3], [2, 1, 0, -1, -2], [3, 2, 1, 0, -1], [4, 3, 2, 1, 0]]
于 2013-03-16T01:05:10.537 に答える