it-swarm.com.de

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

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

Das obige zeigt den folgenden Fehler:

Traceback (most recent call last):
  File "D:\zjm_code\a.py", line 6, in <module>
    b=a.index(6)
ValueError: list.index(x): x not in list

Also muss ich das machen:

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?

789
zjm1126

Um das erste Vorkommen eines Elements in einer Liste zu entfernen, verwenden Sie einfach list.remove:

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

Beachten Sie, dass nicht alle Vorkommen Ihres Elements entfernt werden. Verwenden Sie dazu ein Listenverständnis.

>>> a = [10, 20, 30, 40, 20, 30, 40, 20, 70, 20]
>>> a = [x for x in a if x != 20]
>>> print a
[10, 30, 40, 30, 40, 70]
1326
Johannes Charra

Normalerweise gibt Python eine Exception aus, wenn Sie ihm sagen, dass er etwas tun soll.

if c in a:
    a.remove(c)

oder:

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

Eine Ausnahme ist nicht unbedingt eine schlechte Sache, solange sie von Ihnen erwartet und richtig behandelt wird.

159
Dave Webb

Du kannst tun

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

aber oben müssen 6 in liste 2 mal gesucht werden, also versuchen, außer wäre schneller

try:
    a.remove(6)
except:
    pass
73
YOU

Erwägen:

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

Um alle Vorkommen auszuschließen, können Sie die Filterfunktion in Python .. verwenden.

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

Es würde also alle Elemente von a! = 2 behalten.

Um nur einen der Artikel herauszunehmen, verwenden Sie 

a.remove(2)
49
mathwizurd

So machen Sie es inplace (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:]
13
jfs

Wenn Sie wissen, welchen Wert Sie löschen möchten, finden Sie hier einen einfachen Weg (so einfach wie ich 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]

11
gil

Eine andere Möglichkeit besteht darin, einen Satz anstelle einer Liste zu verwenden, wenn ein Satz in Ihrer Anwendung anwendbar ist.

IE, wenn Ihre Daten nicht bestellt sind und keine Duplikate haben

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

ist fehlerfrei.

Oft ist eine Liste nur ein praktischer Container für tatsächlich ungeordnete Artikel. Es werden Fragen gestellt, wie Sie alle Vorkommen eines Elements aus einer Liste entfernen können. Wenn Sie nicht in erster Linie Dupes wollen, ist ein Satz wieder praktisch.

my_set.add(3)

ändert my_set nicht von oben.

11
GreenAsJade

Wie in zahlreichen anderen Antworten angegeben, funktioniert list.remove(), wirft jedoch eine ValueError, wenn das Element nicht in der Liste enthalten ist. Mit python 3.4+ gibt es einen interessanten Ansatz, um dies zu handhaben, indem Sie den suppress contextmanager verwenden:

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

Dieses Beispiel ist schnell und löscht alle Instanzen eines Werts aus der Liste:

a = [1,2,3,1,2,3,4]
while True:
    try:
        a.remove(3)
    except:
        break
print a
>>> [1, 2, 1, 2, 4]
7
Chase Adams

Das Finden eines Werts in einer Liste und das anschließende Löschen dieses Indexes (falls vorhanden) ist mit der remove-Methode von list einfacher:

>>> a = [1, 2, 3, 4]
>>> try:
...   a.remove(6)
... except ValueError:
...   pass
... 
>>> print a
[1, 2, 3, 4]
>>> try:
...   a.remove(3)
... except ValueError:
...   pass
... 
>>> print a
[1, 2, 4]

Wenn Sie dies häufig tun, können Sie es in einer Funktion zusammenfassen:

def remove_if_exists(L, value):
  try:
    L.remove(value)
  except ValueError:
    pass
7
Roger Pate

Wenn Ihre Elemente unterschiedlich sind, reicht ein einfacher Unterschied.

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]
6
Pagol

Wir können auch .pop verwenden:

>>> lst = [23,34,54,45]
>>> remove_element = 23
>>> if remove_element in lst:
...     lst.pop(lst.index(remove_element))
... 
23
>>> lst
[34, 54, 45]
>>> 
3
SuperNova

Sagen wir zum Beispiel, wir wollen alle 1 von x entfernen. So würde ich es machen:

x = [1, 2, 3, 1, 2, 3]

Nun, dies ist eine praktische Anwendung meiner Methode:

def Function(List, Unwanted):
    [List.remove(Unwanted) for Item in range(List.count(Unwanted))]
    return List
x = Function(x, 1)
print(x)

Und das ist meine Methode in einer einzigen Zeile:

[x.remove(1) for Item in range(x.count(1))]
print(x)

Beide ergeben dies als Ausgabe:

[2, 3, 2, 3, 2, 3]

Hoffe das hilft. PS, bitte beachten Sie, dass dies in Version 3.6.2 geschrieben wurde. Daher müssen Sie sie möglicherweise für ältere Versionen anpassen.

2
Krohnus Melavea

Mit einer for-Schleife und einer Bedingung:

def cleaner(seq, value):    
    temp = []                      
    for number in seq:
        if number != value:
            temp.append(number)
    return temp

Und wenn Sie einige entfernen möchten, aber nicht alle:

def cleaner(seq, value, occ):
    temp = []
    for number in seq:
        if number == value and occ:
            occ -= 1
            continue
        else:
            temp.append(number)
    return temp
2
user7970984
 list1=[1,2,3,3,4,5,6,1,3,4,5]
 n=int(input('enter  number'))
 while n in list1:
    list1.remove(n)
 print(list1)
2
Ravikiran D

Überschreiben Sie die Liste, indem Sie alles außer den Elementen indizieren, die Sie entfernen möchten

>>> s = [5,4,3,2,1]
>>> s[0:2] + s[3:]
[5, 4, 2, 1]
2
kilojoules

in einer Zeile:

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

manchmal ist es nützlich

1
Andrey Suglobov

Vielleicht funktionieren Ihre Lösungen mit Ints, aber es funktioniert nicht für mich mit Wörterbüchern.

In einer Hand hat remove () bei mir nicht funktioniert. Aber vielleicht funktioniert es mit Grundtypen. Ich denke, der Code unten ist auch die Möglichkeit, Elemente aus der Objektliste zu entfernen.

Andererseits hat 'del' auch nicht richtig funktioniert. In meinem Fall mit Python 3.6: Wenn ich versuche, ein Element aus einer Liste in einem 'for' bucle with 'del' -Befehl zu löschen, ändert Python den Index im Prozess und stoppt vorzeitig den Zyklus. Es funktioniert nur, wenn Sie Element für Element in umgekehrter Reihenfolge löschen. Auf diese Weise ändern Sie den Index für ausstehende Elemente-Arrays nicht, wenn Sie ihn durchlaufen

Dann habe ich gebraucht:

c = len(list)-1
for element in (reversed(list)):
    if condition(element):
        del list[c]
    c -= 1
print(list)

'list' ist wie [{'key1': value1 '}, {' key2 ': value2}, {' key3 ': value3}, ...]

Sie können auch mehr Pythonic mit Aufzählung ausführen:

for i, element in enumerate(reversed(list)):
    if condition(element):
        del list[(i+1)*-1]
print(list)
1
David Martínez
arr = [1, 1, 3, 4, 5, 2, 4, 3]

# to remove first occurence of that element, suppose 3 in this example
arr.remove(3)

# to remove all occurences of that element, again suppose 3
# use something called list comprehension
new_arr = [element for element in arr if element!=3]

# if you want to delete a position use "pop" function, suppose 
# position 4 
# the pop function also returns a value
removed_element = arr.pop(4)

# u can also use "del" to delete a position
del arr[4]
0

syntax: lst.remove(x)

Zum Beispiel:

lst = ['one', 'two', 'three', 'four', 'two']

lst.remove('two') #it will remove first occurence of 'two' in a given list
del lst[2] #delete item by index value

print(lst)
0
Ganesh Kharad

Dies entfernt alle Instanzen von "-v" aus dem Array sys.argv und beschwert sich nicht, wenn keine Instanzen gefunden wurden:

while "-v" in sys.argv:
    sys.argv.remove('-v')

Sie können den Code in Aktion in einer Datei mit dem Namen speechToText.py sehen:

$ python speechToText.py -v
['speechToText.py']

$ python speechToText.py -x
['speechToText.py', '-x']

$ python speechToText.py -v -v
['speechToText.py']

$ python speechToText.py -v -v -x
['speechToText.py', '-x']
0
Mike Slinn