1

ゲームのいくつかのクリーチャーの位置を格納するオブジェクトを作成したいと思います。

タプルのリストのリストは私には適切であるように思われました。リストのリストによって作成されたマトリックスは、ゲームのボードを表し、その要素は2つの変数(「タイプ」、数値)のタプルです。例:('h'、3)は次のことを意味します:'ここには3人の人間がいます'。

ボードを初期化する方法は次のとおりです。

>>>lines = 5
>>>columns = 5
>>>board= [[(0,0)]*lines]*columns
>>>pprint(board)
[[(0, 0), (0, 0), (0, 0), (0, 0), (0, 0)],
[(0, 0), (0, 0), (0, 0), (0, 0), (0, 0)],
[(0, 0), (0, 0), (0, 0), (0, 0), (0, 0)],
[(0, 0), (0, 0), (0, 0), (0, 0), (0, 0)],
[(0, 0), (0, 0), (0, 0), (0, 0), (0, 0)]]

それから私は私のボードに何人かの人間を入れたいです:

>>> board[2][2]=('h',3)

ボードは次のようになると思います。

[[(0, 0), (0, 0), (0, 0), (0, 0), (0, 0)],
[(0, 0), (0, 0), (0, 0), (0, 0), (0, 0)],
[(0, 0), (0, 0), ('h', 3), (0, 0), (0, 0)],
[(0, 0), (0, 0), (0, 0), (0, 0), (0, 0)],
[(0, 0), (0, 0), (0, 0), (0, 0), (0, 0)]]

しかし、代わりに、私がそうする>>> pprint(board)と、それは戻ります:

[[(0, 0), (0, 0), ('h', 0), (0, 0), (0, 0)],
[(0, 0), (0, 0), ('h', 0), (0, 0), (0, 0)],
[(0, 0), (0, 0), ('h', 0), (0, 0), (0, 0)],
[(0, 0), (0, 0), ('h', 0), (0, 0), (0, 0)],
[(0, 0), (0, 0), ('h', 0), (0, 0), (0, 0)]]

のすべての要素が変更されている理由がわかりませんboard。これは非常に苛立たしいことです。私は確かにここで何かが欠けています、あなたの助けに感謝します。

4

1 に答える 1

5

以下:

board = [[(0,0)]*lines]*columns

になる必要があります

board = [[(0,0)]*lines for _ in range(columns)]

それ以外の場合、トップレベルのリストは同じサブリストへの参照で構成されます。

In [7]: lines = 3

In [8]: columns = 4

In [9]: board = [[(0,0)]*lines]*columns

In [10]: map(id, board)
Out[10]: [18422120, 18422120, 18422120, 18422120]

この設定では、1つのサブリストを変更すると、すべてが変更されます。

于 2013-01-26T12:18:55.267 に答える