3

私は 8 x 8 の 2D グリッド ルームの周りでロボットを動かすことに取り組んでおり、ロボットの周りの最も近い 5 つのタイルで構成されるセンサーを初期化しています。

self.sensors = [0 for x in xrange(5)]

ここでは、5 つの要素からなる空の配列を作成しています。

しかし、次のようにセンサーの値を設定しようとすると:

    if self.heading == 'East':
        self.sensors[0] = self.room[self.x, self.y-1]
        self.sensors[1] = self.room[self.x+1, self.y-1]
        self.sensors[2] = self.room[self.x+1, self.y]
        self.sensors[3] = self.room[self.x+1, self.y+1]
        self.sensors[4] = self.room[self.x, self.y+1]

「リスト インデックスはタプルではなく整数でなければなりません」というエラーが表示されます。

4

6 に答える 6

7

あなたself.roomは「2次元グリッド」だと言います-リストのリストだと思います。この場合、その要素に次のようにアクセスする必要があります

self.room[self.x][self.y-1]

ペアで外側のリストにインデックスを付ける代わりにself.x, self.y-1

于 2012-02-20T20:18:35.387 に答える
5

問題はあなたから来ていますself.room

これは次のとおりです。

self.room[self.x, self.y-1]

以下と同じです:

self.room[(self.x, self.y-1)]

そして、それはあなたのtupleエラーです。

次の 2 つの可能性があります。

  • self.roomは 2D 配列です。つまり、おそらく次のような意味です。

    self.room[self.x][self.y-1]
    
  • スライスしたいself.room:

    self.room[self.x:self.y-1]
    

に関する詳細情報を提供してくださいself.room

于 2012-02-20T20:19:59.227 に答える
2

self.room[self.x, self.y-1]self.roomタプルを持つインデックス。不規則な配列の場合は、self.room[self.x][self.y-1]代わりに使用する必要があります。

于 2012-02-20T20:19:10.863 に答える
0

self.roomの種類は何ですか。この場合、部屋はリストであると思います。このように割り当てる必要があります。

if self.heading == 'East':
   self.sensors[0] = [self.x, self.y-1]

またはこのように

if self.heading == 'East':
    self.room = [self.x, self.y-1]
    self.sensors[0] = self.room

このような

>>> a = []
>>> type(a)
<type 'list'>

>>> a[2,3]
Traceback (most recent call last):
File "<stdin>", line 1, in ?
TypeError: list indices must be integers

>>> a = [2,3]
于 2012-02-20T20:31:52.240 に答える
0

なぜそのエラーが発生するのですか?私はタプルを渡していません!

__getitem__解決を扱う は、タプル[]に変換されるためです。self.room[1, 2]

class C(object):
    def __getitem__(self, k):
        return k

# Single argument is passed directly.
assert C()[0] == 0

# Multiple indices generate a tuple.
assert C()[0, 1] == (0, 1)

リストは、そのような議論を扱うために作成されていません。

その他の例: https://stackoverflow.com/a/33086813/895245

于 2015-10-12T17:40:26.017 に答える
-2

これは、リストのインデックスは整数でなければならず、それ以外のものではないためです。あなたの場合、タプルを使用しようとしています。

self.roomタプル インデックスを使用して作成する方法がないため、コードは特に奇妙です。

于 2012-02-20T20:18:45.127 に答える