Je dois supprimer tous les éléments qui ont une valeur None
pour une certaine clé dict dans un ensemble python. Étant donné un ensemble simple:
In [7]: z
Out[7]: {None, 1, 2}
In [8]: for item in z:
...: if not item:
...: z.remove(item)
...:
---------------------------------------------------------------------------
RuntimeError Traceback (most recent call last)
<ipython-input-8-680a51a37622> in <module>()
----> 1 for item in z:
2 if not item:
3 z.remove(item)
4
RuntimeError: Set changed size during iteration
Je ne vois pas pourquoi, mais cela ne me permettra pas de supprimer des objets pendant l'itération. Comment puis-je exécuter une vérification de vérité dynamique et supprimer des éléments des ensembles? Je vous remercie
3 réponses
Rob a une bonne réponse si vous souhaitez conserver la structure de votre code; sinon, vous pouvez utiliser une compréhension pour le faire sur une seule ligne.
example_set = {None, 1, 2}
filtered_set = {item for item in example_set if item}
print(filtered_set) # {1, 2}
Si votre logique est plus complexe que simplement if item
, alors il vaut probablement mieux garder la boucle for
.
Cette erreur est très courante lorsque le cycle for
est utilisé pour parcourir une liste ou un dictionnaire. Le problème est que vous avez l'intention de modifier le contenu du dictionnaire pendant que vous parcourez ce document.
Dans ce cas, une solution consiste à utiliser un index pour parcourir le dictionnaire, quelque chose comme:
for i in range( len(dic) ):
Mais vous utilisez SET
, l'objet SET
en python 3 a une méthode appelée discard
que vous pouvez utiliser pour faire ce que vous vouliez. Par exemple:
z = {None, 1, 2}
z.discard(None)
print(z)
Essayez d'abord de faire une copie de l'ensemble:
for item in list(z):
if not item:
z.remove(item)
Questions connexes
De nouvelles questions
python
Python est un langage de programmation multi-paradigme, typé dynamiquement et polyvalent. Il est conçu pour être rapide à apprendre, comprendre, utiliser et appliquer une syntaxe propre et uniforme. Veuillez noter que Python 2 est officiellement hors support à partir du 01-01-2020. Néanmoins, pour les questions Python spécifiques à la version, ajoutez la balise [python-2.7] ou [python-3.x]. Lorsque vous utilisez une variante Python (par exemple, Jython, PyPy) ou une bibliothèque (par exemple, Pandas et NumPy), veuillez l'inclure dans les balises.