a=[1,2,3,4]
b=a.index(6)
del a[b]
print a
Ce qui précède montre l'erreur suivante:
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
Donc je dois faire ceci:
a=[1,2,3,4]
try:
b=a.index(6)
del a[b]
except:
pass
print a
Mais n'y a-t-il pas un moyen plus simple de faire cela?
Pour supprimer la première occurrence d'un élément dans une liste, utilisez simplement list.remove
:
>>> a = ['a', 'b', 'c', 'd']
>>> a.remove('b')
>>> print a
['a', 'c', 'd']
Notez que cela ne supprime pas toutes les occurrences de votre élément. Utilisez une compréhension de liste pour cela.
>>> 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]
Habituellement, Python lève une exception si vous lui dites de faire quelque chose qu'il ne peut pas, vous devrez donc faire soit:
if c in a:
a.remove(c)
ou:
try:
a.remove(c)
except ValueError:
pass
Une exception n'est pas nécessairement une mauvaise chose tant que c'est ce que vous attendez et manipulez correctement.
Tu peux faire
a=[1,2,3,4]
if 6 in a:
a.remove(6)
mais ci-dessus besoin de chercher 6 dans la liste 2 fois, alors essayez sauf serait plus rapide
try:
a.remove(6)
except:
pass
Considérer:
a = [1,2,2,3,4,5]
Pour supprimer toutes les occurrences, vous pouvez utiliser la fonction de filtrage dans python . Par exemple, elle ressemblerait à ceci:
a = list(filter(lambda x: x!= 2, a))
Donc, il garderait tous les éléments d'un! = 2.
Pour sortir un des objets, utilisez
a.remove(2)
Voici comment le faire en place (sans compréhension de liste):
def remove_all(seq, value):
pos = 0
for item in seq:
if item != value:
seq[pos] = item
pos += 1
del seq[pos:]
Si vous savez quelle valeur supprimer, voici un moyen simple (aussi simple que je puisse le penser):
a = [0, 1, 1, 0, 1, 2, 1, 3, 1, 4]
while a.count(1) > 0:
a.remove(1)
Vous obtiendrez [0, 0, 2, 3, 4]
Une autre possibilité consiste à utiliser un ensemble au lieu d'une liste, si un ensemble est applicable dans votre application.
IE si vos données ne sont pas commandées et n’ont pas de doublons,
my_set=set([3,4,2])
my_set.discard(1)
est sans erreur.
Souvent, une liste est simplement un conteneur pratique pour les éléments non ordonnés. Des questions se posent pour savoir comment supprimer toutes les occurrences d'un élément d'une liste. Si vous ne voulez pas de dupes en premier lieu, encore une fois, un ensemble est pratique.
my_set.add(3)
ne change pas mon_set d'en haut.
Comme indiqué par de nombreuses autres réponses, list.remove()
fonctionnera, mais jetez une ValueError
si l'élément ne figurait pas dans la liste. Avec python 3.4+, il existe une approche intéressante pour gérer cela, en utilisant le suppress contextmanager :
from contextlib import suppress
with suppress(ValueError):
a.remove('b')
Cet exemple est rapide et supprimera toutes les occurrences d'une valeur de la liste:
a = [1,2,3,1,2,3,4]
while True:
try:
a.remove(3)
except:
break
print a
>>> [1, 2, 1, 2, 4]
Trouver une valeur dans une liste, puis supprimer cet index (s'il existe) est plus facile en utilisant simplement la méthode remove de list:
>>> 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]
Si vous faites cela souvent, vous pouvez le résumer dans une fonction:
def remove_if_exists(L, value):
try:
L.remove(value)
except ValueError:
pass
Si vos éléments sont distincts, une simple différence d'ensemble fera l'affaire.
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]
Nous pouvons aussi utiliser .pop:
>>> lst = [23,34,54,45]
>>> remove_element = 23
>>> if remove_element in lst:
... lst.pop(lst.index(remove_element))
...
23
>>> lst
[34, 54, 45]
>>>
Disons par exemple, nous voulons supprimer tous les 1 de x. Voici comment je m'y prendrais:
x = [1, 2, 3, 1, 2, 3]
Voici une utilisation pratique de ma méthode:
def Function(List, Unwanted):
[List.remove(Unwanted) for Item in range(List.count(Unwanted))]
return List
x = Function(x, 1)
print(x)
Et voici ma méthode en une seule ligne:
[x.remove(1) for Item in range(x.count(1))]
print(x)
Les deux donnent ceci en sortie:
[2, 3, 2, 3, 2, 3]
J'espère que cela t'aides. PS, notez que ceci a été écrit dans la version 3.6.2, vous devrez donc peut-être l’ajuster pour les anciennes versions.
Avec une boucle for et une condition:
def cleaner(seq, value):
temp = []
for number in seq:
if number != value:
temp.append(number)
return temp
Et si vous souhaitez en supprimer, mais pas tous:
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)
Écraser la liste en indexant tout, sauf les éléments que vous souhaitez supprimer
>>> s = [5,4,3,2,1]
>>> s[0:2] + s[3:]
[5, 4, 2, 1]
en une ligne:
a.remove('b') if 'b' in a else None
parfois utile
Peut-être que vos solutions fonctionnent avec ints, mais cela ne fonctionne pas pour moi avec les dictionnaires.
Dans une main, remove () n'a pas fonctionné pour moi. Mais peut-être que cela fonctionne avec les types de base. Je suppose que le code ci-dessous est également le moyen de supprimer des éléments de la liste d'objets.
D'autre part, "del" n'a pas fonctionné correctement non plus. Dans mon cas, avec Python 3.6: lorsque j'essaie de supprimer un élément d'une liste dans une commande 'pour' bucle avec 'del', python change l'index dans le processus et bucle s'arrête prématurément avant l'heure. Cela ne fonctionne que si vous supprimez élément par élément dans inversé ordre. De cette façon, vous ne modifiez pas l'index de tableau d'éléments en attente lorsque vous le parcourez.
Ensuite, j'ai utilisé:
c = len(list)-1
for element in (reversed(list)):
if condition(element):
del list[c]
c -= 1
print(list)
où 'liste' est comme [{'clé1': valeur1 '}, {' clé2 ': valeur2}, {' clé3 ': valeur3}, ...]
Aussi, vous pouvez faire plus de Pythonic en utilisant énumérer:
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]
syntaxe: lst.remove(x)
Par exemple:
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)
Cela supprime toutes les instances de "-v"
du tableau sys.argv
et ne se plaint pas si aucune instance n'a été trouvée:
while "-v" in sys.argv:
sys.argv.remove('-v')
Vous pouvez voir le code en action dans un fichier appelé speechToText.py
:
$ 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']