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
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
Это классическая ошибка. i
в вашем случае уже является элементом из array
(т. Е. Другого списка), не индексом array
(не int
), поэтому
if Volume == i[2]:
counter += 1
Вы можете проверить руководство по Python. Также попробуйте сделать это:
for i in array:
print (i)
И посмотрите, что у вас получится!
Также я бы посоветовал придерживаться соглашений об именах: переменные обычно записываются в нижнем регистре (volume
, а не Volume
). В данном случае i
вводит в заблуждение. row
или elem
были бы гораздо более подходящими.
Кроме того, поскольку это может происходить часто, обратите внимание, что вы не можете получить доступ к фрагментам списков (но вы можете для массива):
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
Надеюсь, это поможет. Со мной даже случилось так, что мне пришлось преобразовать в массив с плавающей запятой, иначе объект остался бы неправильного типа.
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