2017-10-21 100 views
1

Disons que j'ai une liste, mylist, et que je la définis comme [1, 2, 3, 4, 5]. Comment existe-t-il un moyen simple de doubler chaque élément de la liste à partir d'une boucle for?Modification d'une liste à partir d'une boucle For

Je sais que vous pourriez faire quelque chose comme:

for i in range(len(mylist)): 
    mylist[i] *= 2 

Je sais aussi que vous pourriez faire une compréhension de la liste:

mylist = [2*i for i in range(1, 6)

Mais est-il un moyen de le faire comme ça?

for num in mylist: 
    #code goes here 

J'ai essayé de faire quelque chose comme:

for num in mylist: 
    num *= 2 

mais num est une variable locale, donc cela ne modifie pas mylist, juste num. Est-ce que quelqu'un sait un bon moyen de le faire?

+0

Vous pouvez simplement faire 'maListe [:] = [2 * pour i dans mylist]' ... aussi bien –

Répondre

4

La manière habituelle de faire cela est avec une compréhension de la liste, en itérant directement sur les éléments de la liste, pas indirectement via un index.

mylist = [1, 2, 3, 4, 5] 
mylist = [2 * num for num in mylist] 
print(mylist) 

sortie

[2, 4, 6, 8, 10] 

qui remplace mylist avec un nouvel objet de liste. C'est généralement bien, mais parfois vous voulez modifier l'objet existant, par exemple quand d'autres objets ont une référence à mylist. Vous pouvez le faire avec une attribution de tranche.

mylist[:] = [2 * num for num in mylist] 
1

Ce n'est pas vraiment possible car vous ne devriez pas essayer de changer une liste en la bouclant de cette façon. Je voudrais coller avec vos deux autres façons de manipuler la liste

+0

Vous pouvez faire muter une liste que vous êtes en train d'itérer, tant que vous n'ajoutez ou ne supprimez aucun élément. Mais même dans ce cas, il est possible de modifier le nombre d'éléments de la liste si vous prenez soin de ne pas modifier les indices des éléments que vous n'avez pas encore visités. Ainsi, vous pouvez supprimer en toute sécurité des éléments d'une liste si vous passez dessus en sens inverse. –

1

Utilisation d'une boucle explicite for. Utilisez enumerate pendant l'itération et attribuez une nouvelle valeur à chaque élément.

mylist = [1, 2, 3, 4, 5] 
for i, n in enumerate(mylist): 
    mylist[i] = n * 2 

Faites juste attention - ne change pas le nombre d'éléments dans une liste: Remove items from a list while iterating