Je dois parcourir une liste et remplacer toutes les occurrences d'un élément par un autre. Jusqu'à présent, mes tentatives en code ne me mènent nulle part, quel est le meilleur moyen de le faire?
Par exemple, supposons que ma liste comporte les entiers suivants
>>> a = [1,2,3,4,5,1,2,3,4,5,1]
et je dois remplacer toutes les occurrences du nombre 1 par la valeur 10 pour que la sortie dont j'ai besoin soit
>>> a = [10, 2, 3, 4, 5, 10, 2, 3, 4, 5, 10]
Mon objectif est donc de remplacer toutes les occurrences du nombre 1 par le nombre 10.
>>> a= [1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1]
>>> for n, i in enumerate(a):
... if i == 1:
... a[n] = 10
...
>>> a
[10, 2, 3, 4, 5, 10, 2, 3, 4, 5, 10]
Essayez d'utiliser un compréhension de la liste et le opérateur ternaire .
>>> a=[1,2,3,1,3,2,1,1]
>>> [4 if x==1 else x for x in a]
[4, 2, 3, 4, 3, 2, 4, 4]
La compréhension des listes fonctionne bien, et parcourir en boucle avec énumération peut vous faire économiser un peu de mémoire (car l’opération est essentiellement effectuée sur place).
Il y a aussi la programmation fonctionnelle. Voir utilisation de map :
>>> a = [1,2,3,2,3,4,3,5,6,6,5,4,5,4,3,4,3,2,1]
>>> map(lambda x: x if x != 4 else 'sss', a)
[1, 2, 3, 2, 3, 'sss', 3, 5, 6, 6, 5, 'sss', 5, 'sss', 3, 'sss', 3, 2, 1]
Si vous avez plusieurs valeurs à remplacer, vous pouvez également utiliser un dictionnaire:
a = [1, 2, 3, 4, 1, 5, 3, 2, 6, 1, 1]
dic = {1:10, 2:20, 3:'foo'}
print([dic.get(n, n) for n in a])
> [10, 20, 'foo', 4, 10, 5, 'foo', 20, 6, 10, 10]
>>> a=[1,2,3,4,5,1,2,3,4,5,1]
>>> item_to_replace = 1
>>> replacement_value = 6
>>> indices_to_replace = [i for i,x in enumerate(a) if x==item_to_replace]
>>> indices_to_replace
[0, 5, 10]
>>> for i in indices_to_replace:
... a[i] = replacement_value
...
>>> a
[6, 2, 3, 4, 5, 6, 2, 3, 4, 5, 6]
>>>
a = [1,2,3,4,5,1,2,3,4,5,1,12]
for i in range (len(a)):
if a[i]==2:
a[i]=123
Vous pouvez utiliser une boucle for et or while; Cependant, si vous connaissez la fonction Enumerate intégrée, il est recommandé d'utiliser Enumerate . 1
Pour remplacer facilement tous les 1
par 10
dans a = [1,2,3,4,5,1,2,3,4,5,1]
, vous pouvez utiliser le combo lambda + map et 'Look, Ma, pas de IF ni de FOR!'. :
# This substitutes all '1' with '10' in list 'a' and places result in list 'c':
c = list(map(lambda b: b.replace("1","10"), a))
Voici une méthode très directe dans Python 2.x
a = [1,2,3,4,5,1,2,3,4,5,1] #Replacing every 1 with 10
for i in xrange(len(a)):
if a[i] == 1:
a[i] = 10
print a
Cette méthode fonctionne. Les commentaires sont les bienvenus. J'espère que ça aide :)
Essayez également de comprendre comment fonctionnent les solutions outis et damzam . Les compressions de liste et la fonction lambda sont des outils utiles.
Vous pouvez simplement utiliser la compréhension de liste en python:
def replace_element(YOUR_LIST, set_to=NEW_VALUE):
return [i
if SOME_CONDITION
else NEW_VALUE
for i in YOUR_LIST]
pour votre cas, où vous voulez remplacer toutes les occurrences de 1 par 10, le code sera comme ceci:
def replace_element(YOUR_LIST, set_to=10):
return [i
if i != 1 # keeps all elements not equal to one
else set_to # replaces 1 with 10
for i in YOUR_LIST]