TypeError: индексы списка должны быть целыми числами или срезами, а не списком

array = какой-то список с 3 столбцами и неограниченным количеством строк с данными внутри него.

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

person Michael    schedule 19.05.2016    source источник


Ответы (2)


Это классическая ошибка. i в вашем случае уже является элементом из array (т. Е. Другого списка), не индексом array (не int), поэтому

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

Вы можете проверить руководство по Python. Также попробуйте сделать это:

for i in array:
    print (i)

И посмотрите, что у вас получится!

Также я бы посоветовал придерживаться соглашений об именах: переменные обычно записываются в нижнем регистре (volume, а не Volume). В данном случае i вводит в заблуждение. row или elem были бы гораздо более подходящими.

person Piotr Ćwiek    schedule 19.05.2016

Кроме того, поскольку это может происходить часто, обратите внимание, что вы не можете получить доступ к фрагментам списков (но вы можете для массива):

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

Надеюсь, это поможет. Со мной даже случилось так, что мне пришлось преобразовать в массив с плавающей запятой, иначе объект остался бы неправильного типа.

person François Landes    schedule 25.07.2019
comment
fplandes, у меня та же проблема, какое-то время мой код работал, я внес некоторые изменения в другие функции, и теперь он выдает ошибку TypeError. lamb_func = lambda x,f,v: [x['data']['q']['57']['dt'], x['data']['q']['57']['meta'][f][v]['s']] я передаю аргументы x (словарь), f (строка) и v (строка). Как ее решить, не изменяя lamb_func для получения результатов? - person Simas; 11.09.2019