Code Python pour la somme, avec la condition
La tâche est la suivante: la somme des éléments d'une liste, même avec des index et multiplier le résultat par le dernier de la liste elemet.
J'ai cette oneliner solution de code en Python.
array = [-37,-36,-19,-99,29,20,3,-7,-64,84,36,62,26,-76,55,-24,84,49,-65,41]
print sum(i for i in array if array.index(i) % 2 == 0)*array[-1] if array != [] else 0
Mon résultat est -1476 ( Le calcul est: 41*(-37-19+29+3-64+36+26+55+84-65) )
Le bon résultat est 1968.
Je ne peux pas comprendre pourquoi ce code ne fonctionne pas correctement dans ce cas particulier.
OriginalL'auteur beistvan | 2014-04-06
Vous devez vous connecter pour publier un commentaire.
Il y a une répétition de l'élément
84
dans la liste, ainsiarray.index
ne fonctionne pas comme il devrait être. Aussi, votre code a une complexité quadratique qui n'est pas nécessaire.Pour corriger votre code avec un montant minimum de modifier, cela ressemblerait à quelque chose comme ceci:
de doc
array.index(i) Return the smallest i such that i is the index of the first occurrence of x in the array
. `J'ai compris. C'était la répétition de l'élément 84 qui provoque l'erreur. Merci!!!!
OriginalL'auteur YS-L
C'est ce que vous cherchez:
array[::2]
parcourt le tableau de premier index de la dernière index dans des pas de deux, c'est à dire, chaque autre numéro.sum(array[::2])
obtient la somme des autres numéros de la liste originale.À l'aide de
index
fonctionne uniquement lorsque vous êtes sûr que la liste n'a pas de doublons, c'est pourquoi votre code ne donne pas le résultat correct.C'est la bonne solution.
OriginalL'auteur shaktimaan
Utiliser le haut-
enumerate
fonction, car il y a les éléments en double dans votre liste, etlist.index(x)
renvoie l'index de la première élément égal àx
(comme il est dit dans la documentation). Jetez aussi un oeil à la documentation surénumérer
.if not i % 2
, il est plus Pythonic.Je dirais tableau[::2] est plus pythonic 🙂
Je pense que c'est une solution intéressante qui utilise
for
avec une condition.OriginalL'auteur vaultah