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
-~----------~----~----~----~------~----~------~--~---

Reply via email to