Code:

a = [4,4,6,4,10]

for i in a:
    if i == 4:
        i = i + 10
        print(i)

Je veux que ce code forme un nouveau tableau, qui est:

b = [14,14,6,14,10]

Je ne comprends pas comment faire.

1
Ted 8 mars 2016 à 00:04

3 réponses

Meilleure réponse

Décomposez-le en plusieurs parties. En ce moment, vous vérifiez correctement un nombre égal à 4 et l'incrémentez de 10, ce qui est génial.

Il vous manque actuellement deux composants clés:

  1. Création d'une nouvelle liste et ajout à celle-ci
  2. Une condition else pour tous les autres éléments souhaités.

Donc, pour la première partie, commencez par créer une nouvelle liste:

new_list = []

Nous avons donc:

a = [4,4,6,4,10]
new_list = []

Ensuite, vous voulez append à votre nouvelle liste:

for i in a:
    if i == 4:
        i = i + 10
        new_list.append(i)

Cependant, maintenant, vous devez tenir compte des valeurs que vous ne souhaitez pas incrémenter, c'est là que vous avez besoin d'une condition else:

Donc, si elle n'est pas égale à 4, ajoutez simplement la valeur telle quelle à votre nouvelle liste:

for i in a:
    if i == 4:
        i = i + 10
        new_list.append(i)
    else:
        new_list.append(i)

Cela corrige à peu près les problèmes que vous avez rencontrés dans votre code.

Maintenant, un petit ajustement à faire, c'est que cette ligne:

i = i + 10

Peut être réécrit comme: i += 10

Donc, finalement, nous avons:

a = [4,4,6,4,10]
new_list = []

for i in a:
    if i == 4:
        i += 10
        new_list.append(i)
    else:
        new_list.append(i)

Enfin, tout cela peut être abrégé en une seule ligne comme:

new_list = [i + 10 if i == 4 else i for i in a]
2
idjaw 7 mars 2016 à 21:09

Cela peut être facilement fait avec une compréhension de la liste:

>>> a = [4,4,6,4,10]
>>> b = [14 if x == 4 else x for x in a]
>>> b
[14, 14, 6, 14, 10]

Ou bien plus proche de votre code d'origine:

[i + 10 if i == 4 else i for i in a]

Le problème avec votre code est que la ligne

i = i + 10

Ne modifie pas les valeurs de la liste. Tout ce que vous faites, c'est relier le nom i à i + 10 - mais vous ne faites rien avec la nouvelle valeur.

La manière traditionnelle, sans compréhension de liste, ressemblerait à ceci:

>>> a = [4,4,6,4,10]
>>> b = [] # empty result list
>>> for item in a:
...     if item == 4:
...         b.append(14) # alternatively: b.append(item + 10)             
...     else:
...         b.append(item)
... 
>>> b
[14, 14, 6, 14, 10]
1
timgeb 7 mars 2016 à 21:08
for idx in range(len(a)):
    i = a[idx]
    if i == 4:
        i = i+10
        a[idx] = i
1
inspectorG4dget 7 mars 2016 à 21:06