TypeError: lijstindices moeten gehele getallen of segmenten zijn, geen lijst

array = een soort lijst met 3 kolommen en een onbeperkt aantal rijen met daarin gegevens.

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

Antwoord 1, autoriteit 100%

Dit is een klassieke fout. iis in jouw geval al een element uit array(dwz een andere lijst), nieteen index van array( geeneen int), dus

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

Je kunt de Python-zelfstudiebekijken. Probeer ook dit:

for i in array:
    print (i)

En kijk wat je krijgt!

Ik zou ook adviseren om vast te houden aan naamgevingsconventies: variabelen zijn normaal gesproken kleine letters (Volume, niet Volume). In dit geval is imisleidend. rowof elemzou veel geschikter zijn.


Antwoord 2, autoriteit 38%

Ook, aangezien dit vaak kan gebeuren, moet u er rekening mee houden dat u geen toegang hebt tot segmenten van lijsten (maar wel voor een array):

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

Ik hoop dat dit helpt.
Het overkwam me zelfs dat ik moest converteren naar een float-array, anders zou het object van het verkeerde type blijven.

Other episodes