web-dev-qa-db-ja.com

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

配列= 3つの列とその中にデータを含む無制限の量の行を持つある種のリスト。

Volume = array[0][2] 
counter = 0
for i in array: 
    if Volume == array[i][2]: #<------ why is this line a problem? 
        counter += 1
9
Michael

これは古典的な間違いです。あなたの場合のiはすでにarrayからの要素(つまり別のリスト)、notarrayのインデックス(not int)、したがって

if Volume == i[2]:
    counter += 1

少なくとも Pythonチュートリアル の最初までは必ず行ってください。これは非常にシンプルで基本的なことです。

また、命名規則に従うことをお勧めします。変数は通常、小文字です(volumeではなく、Volume)。この場合、iは誤解を招きます。 rowまたはelemの方がはるかに適しています。

11
Piotr Ćwiek

また、これは頻繁に発生する可能性があるため、リストのスライスにはアクセスできないことに注意してください(ただし、配列にはアクセスできます)。

import numpy as np
integerarray = np.array([33,11,22], dtype=int)
integerlist = [33,11,22]
indexArray = [1,2,0]  # or equivalently, an array, e.g. np.argsort(integerlist)
print(integerarray[indexArray]) ## works fine
print(integerlist[indexArray])  ## triggers: TypeError: list indices must be integers or slices, not list

これがお役に立てば幸いです。偶然にもfloat配列に変換する必要がありました。そうしないと、オブジェクトは間違った型のままになります。

2
fplandes