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?

1899voto

Johannes Charra Punkte 28183

Zum Entfernen der erstes Auftreten eines Elements, verwenden Sie list.remove :

>>> xs = ['a', 'b', 'c', 'd']
>>> xs.remove('b')
>>> print(xs)
['a', 'c', 'd']

Zum Entfernen alle Vorkommnisse eines Elements, verwenden Sie eine Listenverstehen :

>>> xs = ['a', 'b', 'c', 'd', 'b', 'b', 'b', 'b']
>>> xs = [x for x in xs if x != 'b']
>>> print(xs)
['a', 'c', 'd']

215voto

Dave Webb Punkte 184809

Normalerweise wirft Python eine Exception, wenn Sie ihm sagen, dass es etwas tun soll, was es nicht kann, also müssen Sie beides tun:

if c in a:
    a.remove(c)

oder:

try:
    a.remove(c)
except ValueError:
    pass

Eine Ausnahme ist nicht zwangsläufig etwas Schlechtes, solange es sich um eine handelt, die man erwartet und mit der man richtig umgeht.

90voto

YOU Punkte 113320

Das können Sie tun

a=[1,2,3,4]
if 6 in a:
    a.remove(6)

aber oben müssen 6 in der Liste a 2 mal suchen, so versuchen, außer würde schneller sein

try:
    a.remove(6)
except:
    pass

75voto

mathwizurd Punkte 1257

Bedenken Sie:

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

Um alle Vorkommen herauszunehmen, können Sie die Filterfunktion in Python verwenden. Es würde zum Beispiel so aussehen:

a = list(filter(lambda x: x!= 2, a))

Es würden also alle Elemente der a != 2 .

Um nur eines der Elemente herauszunehmen, verwenden Sie

a.remove(2)

24voto

jfs Punkte 370717

Hier sehen Sie, wie man es an Ort und Stelle macht (ohne Listenverständnis):

def remove_all(seq, value):
    pos = 0
    for item in seq:
        if item != value:
           seq[pos] = item
           pos += 1
    del seq[pos:]

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