it-swarm.com.de

Elemente in einer Liste suchen und ersetzen

Ich muss eine Liste durchsuchen und alle Vorkommen eines Elements durch ein anderes ersetzen. Was ist der beste Weg, dies zu tun?

Angenommen, meine Liste enthält die folgenden Ganzzahlen

>>> a = [1,2,3,4,5,1,2,3,4,5,1]

und ich muss alle Vorkommen der Zahl 1 durch den Wert 10 ersetzen, also ist die Ausgabe, die ich benötige

>>> a = [10, 2, 3, 4, 5, 10, 2, 3, 4, 5, 10]

Daher ist es mein Ziel, alle Instanzen der Nummer 1 durch die Nummer 10 zu ersetzen.

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

Versuchen Sie es mit einem Listenverständnis und dem ternären Operator .

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

Das Listenverständnis funktioniert gut, und das Durchlaufen der Aufzählung kann Speicherplatz sparen (da die Operation im Wesentlichen an Ort und Stelle ausgeführt wird).

Es gibt auch funktionale Programmierung. Siehe Verwendung von Karte :

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

Wenn Sie mehrere Werte ersetzen möchten, können Sie auch ein Wörterbuch verwenden:

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

Sie können eine for- und/oder while-Schleife verwenden. Wenn Sie jedoch die integrierte Enumerate-Funktion kennen, wird die Verwendung von Enumerate . 1 empfohlen

6
Eimal Dorani

Um einfach alle 1 durch 10 in a = [1,2,3,4,5,1,2,3,4,5,1] zu ersetzen, könnte man Lambda + Map-Combo verwenden und 'Look, Ma, no IFs oder FORs!' :

# 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

Das Folgende ist eine sehr direkte Methode in 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

Diese Methode funktioniert. Kommentare sind willkommen. Ich hoffe es hilft :)

Versuchen Sie auch zu verstehen, wie outis's und damzam's Lösungen funktionieren. Listenkomprimierung und Lambda-Funktion sind nützliche Werkzeuge.

2
Ananay Mital

Sie können einfach das Listenverständnis in Python verwenden:

def replace_element(YOUR_LIST, set_to=NEW_VALUE):
    return [i
            if SOME_CONDITION
            else NEW_VALUE
            for i in YOUR_LIST]

in Ihrem Fall, in dem Sie alle Vorkommen von 1 durch 10 ersetzen möchten, sieht das Code-Snippet folgendermaßen aus:

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