Re: Customizing sequence types
- From: Mr.SpOOn <mr.spoon21@xxxxxxxxx>
- Date: Sun, 16 Nov 2008 19:44:22 +0100
On Sun, Nov 16, 2008 at 7:15 PM, Arnaud Delobelle
<arnodel@xxxxxxxxxxxxxx> wrote:
Mr.SpOOn <mr.spoon21@xxxxxxxxx> writes:
Hi,
I'm trying to create a class which inherit a list to change some behavior.
This list should contain other instance objects and has to manage
these instances in a particular way.
1) I need to sort this elements in this list, but they must be sorted
using an instance variable.
I don't understand what this means.
Well, inside the elements I need to order there is a variable that
stores a numeric value. I need to sort the elements using this value.
Or sort them according to a key.
Ok, knowing what to search for I cleared my ideas. I think I just have
to choose between redefining __cmp__() or using the key argument.
2) I need to have just unique elements. Maybe this is related to first
question (or maybe not). Again, to estabilish the uniqueness of an
element I have to use an instance variable. I think I have to rewrite
both the methods append() and __contains__(), but I'm not sure how.
For the first one I did:
def append(self, element):
if element in self:
pass
else:
list.append(self, element)
It seems right to me, but I have no idea what to do with __contains__()
Why do you need to redefine __contains__?
Well, to check the presence of an element according to an attribute.
If I were you, I wouldn't inherit from list because it seems that your
list-like object quite different from a plain list.
The most obvious choice seems to be stes. But the order is really
important. Maybe the best solution is using sets and convert them to
list when I need to access them in the correct order.
You should probably use the `bisect` module
(http://docs.python.org/library/bisect.html) for searching and
inserting into the list as it takes advantage of and ensures that the
list keeps sorted. It also means that __contains__ and some other
operations become O(log N) rather than O(N).
This seems good too, but I'd always have to check the presence of an
element before inserting a new one and it's still not clear to me how
to do it.
Thanks everybody.
.
- References:
- Customizing sequence types
- From: Mr . SpOOn
- Re: Customizing sequence types
- From: Arnaud Delobelle
- Customizing sequence types
- Prev by Date: Re: Newbie code review of parsing program Please
- Next by Date: Re: Clustering the keys of a dict according to its values
- Previous by thread: Re: Customizing sequence types
- Next by thread: Re: Customizing sequence types
- Index(es):
Relevant Pages
|