Compte tenu de la liste suivante
a = [0, 1, 2, 3]
J'aimerais créer une nouvelle liste b
, composée d'éléments pour lesquels la valeur actuelle et la valeur suivante de a
sont additionnées. Il contiendra 1 moins d'élément que a
.
Comme ça:
b = [1, 3, 5]
(de 0 + 1, 1 + 2 et 2 + 3)
Voici ce que j'ai essayé:
b = []
for i in a:
b.append(a[i + 1] - a[i])
b
Le problème est que je continue à avoir cette erreur:
IndexError: list index out of range
Je suis presque sûr que cela se produit car, au moment où j'obtiens le dernier élément d'un (3), je ne peux pas l'ajouter à quoi que ce soit, car cela sort de sa valeur (il n'y a pas de valeur après 3 à ajouter ). Je dois donc dire au code de s’arrêter à 2 tout en faisant référence à 3 pour le calcul.
for
, vous parcourez les éléments d'une liste a
. Mais dans le corps de la boucle, vous utilisez ces éléments pour indexer cette liste, alors que vous voulez réellement des index.a
contienne 5 éléments, qu’un nombre 100 en fasse partie et que la boucle for l’atteigne. Vous allez essentiellement essayer de récupérer le 100ème élément de la liste a
, qui n’est évidemment pas là. Cela vous donnera un IndexError
.Nous pouvons résoudre ce problème en effectuant une itération sur une plage d'index:
for i in range(len(a))
et accédez aux éléments de a
comme ceci: a[i]
. Cela ne donnera aucune erreur.
a[i]
, Mais aussi a[i+1]
. C'est aussi un endroit pour une erreur potentielle. Si votre liste contient 5 éléments et que vous la parcourez comme indiqué au point 1, vous obtiendrez un IndexError
. Pourquoi? Étant donné que range(5)
est essentiellement 0 1 2 3 4
, Lorsque la boucle atteint 4, vous essayez d'obtenir l'élément a[5]
. Puisque l’indexation dans Python commence par 0 et que votre liste contient 5 éléments, le dernier élément aurait un index 4, donc obtenir le a[5]
Signifierait obtenir le sixième élément qui ne exister.Pour résoudre ce problème, vous devez soustraire 1 de len(a)
afin d'obtenir une séquence de plage 0 1 2 3
. Puisque vous utilisez un index i+1
, Vous aurez toujours le dernier élément, mais vous éviterez ainsi l'erreur.
b = [a[i] + a[i+1] for i in range(len(a) - 1)]
Cela fait le travail en une seule ligne.
Lorsque vous appelez for i in a:
, Vous obtenez les éléments réels, pas les index. Lorsque nous atteignons le dernier élément, c'est-à-dire 3
, b.append(a[i+1]-a[i])
cherche a[4]
, N'en trouve pas, puis échoue. Essayez plutôt de parcourir les index tout en vous arrêtant juste avant le dernier, comme
for i in range(0, len(a)-1): Do something
Votre code actuel ne fonctionnera pas encore pour la partie faire quelque chose cependant;)
Essayez de réduire la plage de la boucle for à range(len(a)-1)
:
a = [0,1,2,3]
b = []
for i in range(len(a)-1):
b.append(a[i]+a[i+1])
print(b)
Cela peut aussi être écrit comme un compréhension de la liste :
b = [a[i] + a[i+1] for i in range(len(a)-1)]
print(b)
Vous accédez aux éléments de la liste, puis vous les utilisez pour tenter d’indexer votre liste. Ce n'est pas une bonne idée. Vous avez déjà une réponse montrant comment vous pouvez utiliser l'indexation pour obtenir votre liste de somme, mais une autre option serait de Zip
la liste avec une tranche de soi telle que vous pouvez additionner les paires.
b = [i + j for i, j in Zip(a, a[1:])]