web-dev-qa-db-fra.com

Itération sur des tableaux dans Python 3

Je n'ai pas codé depuis un moment et essayé de revenir en Python. J'essaie d'écrire un programme simple qui additionne un tableau en ajoutant chaque valeur d'élément de tableau à une somme. Voici ce que j'ai

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

Je reçois l'erreur suivante:

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

J'ai trouvé que ce que j'essaie de faire est apparemment aussi simple que cela:

sum(ar)

De toute évidence, je ne parcoure pas le tableau correctement de toute façon, et je suppose que c'est quelque chose que je devrai apprendre correctement à d'autres fins. Merci!

4
q-compute

Lorsque vous bouclez dans un tableau comme vous l'avez fait, votre variable for (dans cet exemple i) est l'élément actuel de votre tableau.

Par exemple, si votre ar est [1,5,10], la valeur i de chaque itération est 1, 5 et 10. Et parce que la longueur de votre tableau est 3, l'indice maximal que vous pouvez utiliser est 2. Ainsi, lorsque i = 5 vous obtenez IndexError .Vous devriez changer votre code en quelque chose comme ceci:

for i in ar:
    theSum = theSum + i

Ou, si vous souhaitez utiliser des index, vous devez créer une plage de 0 à array length - 1.

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

La boucle for parcourt les éléments du tableau, pas ses index . Supposons que vous ayez une liste ar = [2, 4, 6]:

Lorsque vous parcourez-le avec for i in ar:, les valeurs de i seront 2, 4 et 6. Ainsi, lorsque vous essayez d'accéder à ar[i] pour la première valeur, cela peut fonctionner (la dernière position de la liste étant 2, un est égal à 6), mais pas pour les dernières valeurs, car un [4] n'existe pas.

Si vous avez l'intention d'utiliser les index de toute façon, essayez d'utiliser for index, value in enumerate(ar):, alors theSum = theSum + ar[index] devrait fonctionner correctement.

2
umluizlima

Vous pouvez utiliser 

    nditer

Ici j'ai calculé non. des coefficients positifs et négatifs dans une régression logistique:

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))

Sortie:

no. of positive coefficients is : 85035
no. of negative coefficients is : 36199
0
ajay mathur