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'])]
Vous pouvez utiliser set difference operator , comme ceci
test, empty = [{'', 'a'}, {'b', ''}], {''}
print [x - empty for x in test]
# [set(['a']), set(['b'])]
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 :-)
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'])]
>>> 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'])