
Going back to the original problem... On Thu, Jul 23, 2009 at 09:12, Andrew Bennetts<andrew@bemusement.org> wrote:
Andy Kish wrote: [...]
The above intersection case would end up looking something like:
set_intersection = set.universal() for s in sets: set_intersection &= s
Or even:
set_intersection = reduce(operator.and_, sets, set.universal())
Although, you can already pass multiple (or zero) sets to set.intersection(). So your special case version can be a little simpler...
sets = list(sets) if len(sets) == 0: return set() return sets[0].intersection(sets[1:])
Which isn't as elegant, but it's also not so bad.
But set.intersection doesn't need to be called using dot notation, the class attribute call works just as well: try: return set.intersection(*sets) except TypeError: return set() I'd say this is as elegant as the OPs solution with the universal set. Universal sets and other such cofinite sets could be nice, but I don't think they should be in the python standard library.