web-dev-qa-db-fra.com

rechercher et remplacer des éléments dans une liste

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.

214
James
>>> 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]
205
ghostdog74

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]
440
outis

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]
29
damzam

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]
25
roipoussiere
>>> 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]
>>> 
9
John La Rooy
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

6
Eimal Dorani

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))

3
J.Paul

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.

2
Ananay Mital

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]
1
bassel7