-4

メインプログラムに問題があります:

E, back = dict(), dict()

for C in range(cols+1): 
    E[0,C], back[0,C] = m[0,C], None

このエラーが返されます:

TypeError: リストのインデックスはタプルではなく整数でなければなりません

リストではなく辞書を明確に初期化したので、私はとても混乱しています。

このエラーは何ですか、bot E と back は最初の行に記載されている辞書です。しかし、要素を追加しようとすると、LIST エラーが表示されますか?

EDIT --- "m" はピクセルの配列です "cols" は len(m[0]) 私のコードの目的は、m[x][y] に保存された画像の垂直シーム カービングを実行することです。位置 x、y のピクセルのグレースケールです。シームカービング アルゴリズムのヘルプは必要ありませんが、このエラー メッセージが原因で、今は頭がおかしくなり、意味がありません。

さて、私は編集で自分自身を修正しました... m を辞書としてアクセスしようとしていましたが、実際には配列です。私を恥じてください。

4

2 に答える 2

4

すべてのコードを示したわけではありませんが、それmはリストだと思います。

于 2012-05-13T15:26:40.830 に答える
3

あなたが述べmたのはリストのリストです。サブリストの要素にアクセスするための Python の構文は、[a, b]it'sではありません[a][b]

m[0,C]mtuple によってインデックス付けされたの要素にアクセスすることを意味します(0, C)

あなたが望むのは、の要素を取得0m、次にその要素Cの要素を取得することですm[0][C]

これを明確に示すには:

>>> a = [list(range(5)) for _ in range(5)]
>>> a
[[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]]
>>> a[0, 2]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: list indices must be integers, not tuple
>>> a[0][2]
2

エラーが完全に理にかなっていることがわかります。

于 2012-05-13T15:33:28.473 に答える