1212 Stimmen

Gibt es eine einfache Möglichkeit, ein Listenelement nach Wert zu löschen?

Ich möchte einen Wert aus einer Liste entfernen, wenn er in der Liste vorhanden ist (was er möglicherweise nicht ist).

a = [1, 2, 3, 4]
b = a.index(6)

del a[b]
print(a)

Das obige Beispiel führt zu dem Fehler:

ValueError: list.index(x): x not in list

Ich muss also Folgendes tun:

a = [1, 2, 3, 4]

try:
    b = a.index(6)
    del a[b]
except:
    pass

print(a)

Aber gibt es nicht einen einfacheren Weg, dies zu tun?

17voto

Felk Punkte 6942

Wie in zahlreichen anderen Antworten erwähnt, list.remove() wird funktionieren, aber eine ValueError wenn der Eintrag nicht in der Liste enthalten war. Mit Python 3.4+ gibt es einen interessanten Ansatz, dies zu handhaben, indem man die Kontextmanager unterdrücken :

from contextlib import suppress
with suppress(ValueError):
    a.remove('b')

15voto

gil Punkte 2016

Wenn Sie wissen, welchen Wert Sie löschen müssen, können Sie dies auf einfache Weise tun (so einfach, wie ich es mir vorstellen kann):

a = [0, 1, 1, 0, 1, 2, 1, 3, 1, 4]
while a.count(1) > 0:
    a.remove(1)

Sie erhalten [0, 0, 2, 3, 4]

14voto

Andrey Topoleov Punkte 1006

In einer Zeile:

a.remove('b') if 'b' in a else None

Manchmal ist es nützlich.

Noch einfacher:

if 'b' in a: a.remove('b')

13voto

GreenAsJade Punkte 14015

Eine andere Möglichkeit ist die Verwendung eines Sets anstelle einer Liste, wenn ein Set in Ihrer Anwendung anwendbar ist.

IE, wenn Ihre Daten nicht geordnet sind und keine Duplikate aufweisen, dann

my_set=set([3,4,2])
my_set.discard(1)

fehlerfrei ist.

Oft ist eine Liste nur ein praktischer Behälter für Elemente, die eigentlich ungeordnet sind. Es gibt Fragen, wie man alle Vorkommen eines Elements aus einer Liste entfernen kann. Wenn Sie Duplikate von vornherein vermeiden wollen, ist auch hier eine Menge praktisch.

my_set.add(3)

ändert my_set von oben nicht.

11voto

Pagol Punkte 241

Wenn Ihre Elemente eindeutig sind, reicht ein einfacher Mengenunterschied aus.

c = [1,2,3,4,'x',8,6,7,'x',9,'x']
z = list(set(c) - set(['x']))
print z
[1, 2, 3, 4, 6, 7, 8, 9]

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X