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?
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]
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.
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
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)
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:]
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]
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.
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')
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]
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
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]
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]
>>>
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.
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
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)
Ü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]
in einer Zeile:
a.remove('b') if 'b' in a else None
manchmal ist es nützlich
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)
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]
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)
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']