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.

168
demandé sur PyNEwbie 2010-04-06 05:30:18

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]
165
répondu ghostdog74 2018-01-31 13:46:57

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]
360
répondu outis 2010-04-06 01:37:11

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]
20
répondu damzam 2010-04-07 02:10:17

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]
10
répondu roipoussiere 2018-01-08 16:09:03
>>> 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
répondu John La Rooy 2010-04-06 01:37:52
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

3
répondu Eimal Dorani 2018-01-31 09:44:15

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.

2
répondu Ananay Mital 2017-09-12 11:58:52

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]
0
répondu bassel7 2018-05-23 11:46:09