Could we add the idea of "negative" sets to Python? That means sets that contain EVERYTHING EXCEPT certain elements.
This is usually called the "complement" of a set. Since (in set theory) there is no set of all sets, "absolute" complement is an unfounded concept. The idea of having a universe and defining "absolute complement" as complement relative to the universe is often adopted, but it has set-theoretic problems (the universe doesn't have a powerset, for one thing), and frequently you end up with a hierarchy of universes (categorists who try build category theory on set theory run into that a lot).
Considering those points, this proposal seems very abstract. I think it's fun to think about, and maybe it has practical applications in constructing other sets. But a "set" that isn't iterable, and whose "in" is logically equivalent to "not in" its complement (which is a Python set!), doesn't seem directly useful in itself.
I think this is one where you need to present both use cases and an implementation. Speaking of implementations and fun:
First, let's have a universal set that contains everything.
assert element in set.UNIVERSAL
For what values of "everything"? Python sets cannot contain all the objects of Python. Specifically, an element of a set must be hashable. Will that be true for your universal set?
The universal set is a superset of every other set.
assert set.UNIVERSAL >= any_set
Is it a superset of all iterables (however you want to define the transformation of iterables to sets, given the "hashability" issue)?
However REMOVING an element from the set puts it on "negative list".
myset = set.UNIVERSAL
Shouldn't this be "myset = copy(set.UNIVERSAL)"?
You'd like it to be "myset = set(set.UNIVERSAL)", I guess, and that indeed would require adding set.UNIVERSAL to Python.
myset.remove(element) assert element not in myset
Intersection of a "negative set" with a normal set gives again a normal set. Union of two negative sets, or a negative set with a normal set, gives a negative set.
The main issue: negative sets would not be iterable, but you can intersect them with the desired subdomain and iterate over. _______________________________________________ Python-ideas mailing list -- email@example.com To unsubscribe send an email to firstname.lastname@example.org https://mail.python.org/mailman3/lists/python-ideas.python.org/ Message archived at https://email@example.com/message/MY77JS... Code of Conduct: http://python.org/psf/codeofconduct/