De acuerdo con mi interpretación de Python 2.7.2 documentación para Built-In Types 5.7 Set Types, debería ser posible eliminar los elementos del conjunto A de la serie B al pasar de A a set.remove(elem)
o set.discard(elem)
Python Extraiga el conjunto del conjunto
De la documentación 2.7.2:
nota, el argumento elem a la
__contains__()
,remove()
ydiscard()
métodos pueden ser un conjunto.
I interpretan que esto quiere decir que puede pasar un set
-remove(elem)
o discard(elem)
y todos aquellos elementos serán eliminados a partir del conjunto de destino. Usaría esto para hacer algo extraño como eliminar todas las vocales de una cadena o remove all common words from a word-frequency historam. Aquí está el código de prueba:
Python 2.7.2 (default, Jun 12 2011, 14:24:46) [M...
Type "help", "copyright", "credits" or "license"
>>> a = set(range(10))
>>> b = set(range(5,10))
>>> a
set([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> b
set([8, 9, 5, 6, 7])
>>> a.remove(b)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: set([8, 9, 5, 6, 7])
>>> a.discard(b)
>>> a
set([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>>
que espero volver:
>>> a
set([0, 1, 2, 3, 4])
sé que puedo lograr esto con a.difference(b)
que devuelve un nuevo conjunto; o con un set.difference_update(other)
; o con los operadores de conjuntos a -= b
, que modifican el conjunto in situ.
¿Esto es un error en la documentación? ¿Puede set.remove(elem)
en realidad no tomar un conjunto como argumento? ¿O la documentación se refiere a conjuntos de conjuntos? Dado que difference_update
realiza mi interpretación, supongo que el caso es el último.
¿No es lo suficientemente claro?
EDITAR Después de 3 años de (algunos profesionales) el trabajo pitón adicional, y siendo elaborado recientemente de nuevo a esta pregunta, me doy cuenta ahora de lo que en realidad estaba tratando de hacer podría lograrse con:
>>> c = a.difference(b)
set([0,1,2,3,4])
que es lo que originalmente estaba tratando de conseguir.
¡Me encantaría que volvieras a esto tantos años después! +1 –