John H Palmieri wrote:
>
>
> On Jan 9, 3:40 pm, "William Stein" <[email protected]> wrote:
>> On Fri, Jan 9, 2009 at 3:38 PM, Mike Hansen <[email protected]> wrote:
>>
>>> On Fri, Jan 9, 2009 at 3:36 PM, John H Palmieri <[email protected]>
>>> 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 [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/sage-support
URLs: http://www.sagemath.org
-~----------~----~----~----~------~----~------~--~---