trouver et remplacer des éléments dans une liste (python)
Je dois rechercher dans une liste et remplacer toutes les occurrences d'un élément par un autre. Jusqu'à présent, mes tentatives de code ne me mènent nulle part, Quelle est la meilleure façon 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, donc la sortie dont j'ai besoin est
>>> a = [10, 2, 3, 4, 5, 10, 2, 3, 4, 5, 10]
Mon but est donc de remplacer toutes les instances du nombre 1 par le nombre 10.
8 réponses
>>> 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 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 de la liste fonctionne bien-et boucler avec enumerate peut vous économiser de la mémoire (b / c l'opération est essentiellement en place).
Il y a aussi la programmation fonctionnelle...voir la section 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 and or while; cependant, si vous connaissez la fonction Enumerate intégrée, il est recommandé d'utiliser Enumerate.1
Ce qui suit est une méthode très directe en 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 les solutionsoutis etdamzam fonctionnent. 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, l'extrait de 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]