John H Palmieri wrote: > > > On Jan 9, 3:40 pm, "William Stein" <wst...@gmail.com> wrote: >> On Fri, Jan 9, 2009 at 3:38 PM, Mike Hansen <mhan...@gmail.com> wrote: >> >>> On Fri, Jan 9, 2009 at 3:36 PM, John H Palmieri <jhpalmier...@gmail.com> >>> wrote: >>>> Is this a bug? >>>> sage: Set([]) >>>> {} >>>> sage: Set(Set([])) >>>> {} >>>> sage: Set([]) == Set(Set([])) >>>> True >>> This is because Set takes a list (iterable) for all the of the >>> elements of the set. So, if you want to construct the set containing >>> the empty set, you'd do the following: >>> sage: e = Set([]) >>> sage: ee = Set([e]) >>> sage: e >>> {} >>> sage: ee >>> {{}} >>> sage: e == ee >>> False >> Yep. Think "coercion" -- Set(foo) makes foo into a set. >> It doesn't make the set containing foo. > > Oh, I should have figured that out. > > Here's another question: what is the most efficient way of testing > whether one Set is a subset of another? I can do > > S in list(T.subsets()) > > -- and it's a bit frustrating that I can't do S in T.subsets() -- and > I can also manipulate intersections, unions, differences, etc. I can > also convert to python sets and use <=. Is there a preferred way?
You could use all(s in T for s in S) to do the job. It might be faster to use another mechanism, but the above does shortcut (i.e., it stops when an element is found in S that is not in T). Alternatively, you could calculate the set difference S \ T and check that is empty; that might be faster. Do you know how to use the timeit command? sage: timeit('all(s in T for s in S)') 625 loops, best of 3: 10.1 µs per loop sage: timeit('S.difference(T)==Set([])') 625 loops, best of 3: 26.2 µs per loop sage: timeit('len(S.difference(T))==0') 625 loops, best of 3: 21.4 µs per loop Python still has this beat, though: sage: S_python = set(S) sage: T_python = set(T) sage: timeit('S_python.issubset(T_python)') 625 loops, best of 3: 755 ns per loop Jason --~--~---------~--~----~------------~-------~--~----~ To post to this group, send email to sage-support@googlegroups.com To unsubscribe from this group, send email to sage-support-unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/sage-support URLs: http://www.sagemath.org -~----------~----~----~----~------~----~------~--~---