web-dev-qa-db-fra.com

Comment supprimer un élément d'un ensemble?

Je pense que cela peut être lié à un ensemble étant mutable.

En gros, je peux supprimer un élément d'un ensemble en utilisant set.discard(element). Cependant, set.discard(element) lui-même retourne None. Mais j'aimerais avoir une copie du jeu mis à jour. Par exemple, si j'ai une liste d'ensembles, comment puis-je obtenir facilement une copie mise à jour à l'aide d'opérations de compréhension de liste? 

Exemple de code:

test = [{'', 'a'}, {'b', ''}]
print [x.discard('') for x in test]
print test

reviendra 

[None, None]
[set(['a']), set(['b'])]
19
Zhen Sun

Vous pouvez utiliser set difference operator , comme ceci

test, empty = [{'', 'a'}, {'b', ''}], {''}
print [x - empty for x in test]
# [set(['a']), set(['b'])]
9
thefourtheye

Chaque fois que vous vous sentez contraint par une méthode qui ne fonctionne que sur place, vous pouvez utiliser le comportement de or/and pour obtenir la sémantique souhaitée.

[x.discard('') or x for x in test]

Cette technique est parfois utile pour obtenir des résultats dans une variable lambda (ou dans d'autres situations dans lesquelles vous êtes limité à une seule expression) qui sont autrement impossibles. Que ce soit le plus "lisible" ou "Pythonic" est discutable :-)

14
roippi

Ceci? (Duplicata de la réponse @thefourtheye)

L'opération de soustraction set renvoie des données set.

test = [{'', 'a'}, {'b', ''}]
print [x - {''} for x in test]
print test

Sortie:

[set(['a']), set(['b'])]
[set(['a', '']), set(['', 'b'])]
1
Kei Minagawa
>>> s = set( ['a' , 'b', 'c' , 'd' ] )
>>> print(s)
set(['a', 'c', 'b', 'd'])
>>>
>>> s -= {'c'}
>>> print(s)
set(['a', 'b', 'd'])
>>>
>>> s -= {'a'}
>>> print(s)
set(['b', 'd'])
0
jxramos