Itereren over arrays in Python 3

Ik ben al een tijdje niet meer aan het coderen en probeer weer in Python te komen. Ik probeer een eenvoudig programma te schrijven dat een array optelt door elke array-elementwaarde bij een som op te tellen. Dit is wat ik heb:

def sumAnArray(ar):
    theSum = 0
    for i in ar:
        theSum = theSum + ar[i]
    print(theSum)
    return theSum

Ik krijg de volgende foutmelding:

line 13, theSum = theSum + ar[i]
IndexError: list index out of range

Ik ontdekte dat wat ik probeer te doen schijnbaar zo simpel is als dit:

sum(ar)

Maar het is duidelijk dat ik de array sowieso niet goed doorloop, en ik denk dat het iets is dat ik goed moet leren voor andere doeleinden. Bedankt!


Antwoord 1, autoriteit 100%

Als je een array herhaalt zoals je deed, is je variabele for (in dit voorbeeld i) het huidige element van je array.

Als uw arbijvoorbeeld [1,5,10]is, is de i-waarde in elke iteratie 1, 5en 10.
En omdat uw arraylengte 3 is, is de maximale index die u kunt gebruiken 2. dus wanneer i = 5krijgt u IndexError.
Je zou je code in zoiets als dit moeten veranderen:

for i in ar:
    theSum = theSum + i

Of als u indexen wilt gebruiken, moet u een bereik maken van 0 tot array length - 1.

for i in range(len(ar)):
    theSum = theSum + ar[i]

Antwoord 2, autoriteit 7%

De for-lus herhaalt de elementen van de array, niet de indexen.
Stel dat je een lijst hebt ar = [2, 4, 6]:

Als je het herhaalt met for i in ar:zijn de waarden van i 2, 4 en 6. Dus als je probeert toegang te krijgen tot ar[i]voor de eerste waarde zou het kunnen werken (aangezien de laatste positie van de lijst 2 is, is a[2] gelijk aan 6), maar niet voor de laatste waarden, aangezien a[4] niet bestaat.

Als je toch van plan bent indexen te gebruiken, probeer dan for index, value in enumerate(ar):, dan zou theSum = theSum + ar[index]gewoon moeten werken prima.


Antwoord 3, autoriteit 2%

U kunt

. gebruiken

   nditer

Hier heb ik nee berekend. van positieve en negatieve coëfficiënten in een logistische regressie:

b=sentiment_model.coef_
pos_coef=0
neg_coef=0
for i in np.nditer(b):
    if i>0:
    pos_coef=pos_coef+1
    else:
    neg_coef=neg_coef+1
print("no. of positive coefficients is : {}".format(pos_coef))
print("no. of negative coefficients is : {}".format(neg_coef))

Uitvoer:

no. of positive coefficients is : 85035
no. of negative coefficients is : 36199

Antwoord 4

Tijdens het itereren van een lijst of array met deze methode:

ar = [10, 11, 12]
for i in ar:
    theSum = theSum + ar[i]

Je krijgt de waarden van de lijst of array opeenvolgend in de variabele i.
Als u de variabele ibinnen de for loopafdrukt. U krijgt de volgende uitvoer:

10
11
12

In uw code bent u echter verwarrend iVariabele met indexwaarde van array. Daarom betekent tijdens het doen van ar[i]ar[10]voor de eerste iteratie. Dat is natuurlijk index buiten het bereik gooien IndexError

bewerken
Je kunt dit voor beter begrip van verschillende methoden van iteratie over array of lijst in Python

Other episodes