[Tutor] Sets
Magnus Lyckå
magnus@thinkware.se
Fri Apr 18 09:49:02 2003
At Fri, 18 Apr 2003 02:57:41 -0500, Norvell Spearman wrote:
>On Thursday, 2003.04.17, 19:23:47 -0700, Sean 'Shaleh' Perry wrote:
> > On Thursday 17 April 2003 17:32, Brian Christopher Robinson wrote:
> > > I think I read that sets will be a primitive data type in the next
> version
> > > of Python, but what is a good way to implement them now?
> >
> > use a dictionary.
That's a slightly terse explanation...
>Not that I know a better implementation (I'm new to Python and only
>recently began studying set theory), but why is using a dictionary a
>good way to implement sets? According to the set theory text I'm using
>(and this is the text's notation, not Python code):
>
> (1) {a, a} = {a}
> (2) {a, b} = {b, a}
Yes.
>Since dictionaries are unordered (2) above is covered, but wouldn't (1)
>(if one creates a set class using a dictionary) require a method to get
>rid of---or ignore---duplicates?
No. You store the items in the set as keys in the dictionary.
The same key can't occur twice.
>Or would one implement a set where the
>dictionary's key:value pairs are item:frequency and two sets are equal
>if their respective dictionaries contain the same items, ignoring
>frequencies > 0?
In a simple set class, you could just store 1, or whatever
as value. Storing a frequency is an extension to the set
behaviour you described above, but it's used now and then.
Such a class is often called a "bag" or a "multiset".
>Would the null set then be represented by
>
> my_set = {}
Well, wrapped in a class, but yes, that looks empty
to me.
>Or am I using ``sets'' in the wrong context?
No.
I searched google for "python set class". For instance, I found these:
http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/52258
http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/106469
(Not using dict, since it has to store mutable objects)