¿Cómo eliminar un elemento de un conjunto?

Creo que esto puede estar relacionado con el hecho de ser mutable .

Básicamente, puedo eliminar un elemento de un conjunto usando set.discard(element) . Sin embargo, set.discard(element) devuelve None . Pero me gustaría obtener una copia del conjunto actualizado. Por ejemplo, si tengo una lista de conjuntos, ¿cómo puedo obtener una copia actualizada de manera conveniente utilizando las operaciones de comprensión de lista?

Código de muestra:

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

volverá

 [None, None] [set(['a']), set(['b'])] 

Puede utilizar el operador de diferencia de conjunto , como este

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

Cuando te sientas constreñido por un método que solo funciona en el lugar, puedes usar el comportamiento de or para lograr la semántica que deseas.

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

Esta técnica es ocasionalmente útil para lograr cosas en una lambda (u otras situaciones en las que estás restringido a una sola expresión) que de otro modo son imposibles. Si es el más “legible” o “pythonic” es discutible 🙂

Esto? (Duplicado de @thefourtheye respuesta)

set operación de restar set devuelve los datos de set .

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

Salida:

 [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'])