python bisect questions
sjmachin at lexicon.net
Thu Apr 3 18:43:32 EDT 2008
On Apr 4, 9:21 am, ankitks.mi... at gmail.com wrote:
> On Apr 3, 4:24 pm, "Terry Reedy" <tjre... at udel.edu> wrote:
> > <ankitks.mi... at gmail.com> wrote in message
> >news:6bb6927b-f553-40db-a142-2ce86b9e819f at q27g2000prf.googlegroups.com...
> > |I am week on functional programming, and having hard time
> > | understanding this:
> > |
> > | class myPriorityQueue:
> > | def __init__(self, f=lamda x:x):
> > | self.A = 
> > | self.f = f
> > |
> > | def append(self, item)
> > | bisect.insort(self.A, (self.f(item), item))
> > | ............
> > |
> > | now I know we are inserting items(user defined type objects) in list A
> > | base on sorting order provided by function A.
> > | but what I don't understand is bisect command
> > | what does bisect.insort(self.A, (self.f(item), item)) doing
> here is doc
> insort_right(a, x[, lo[, hi]])
> Insert item x in list a, and keep it sorted assuming a is sorted.
> If x is already in a, insert it to the right of the rightmost x.
> Optional args lo (default 0) and hi (default len(a)) bound the
> slice of a to be searched.
> but I am still confuse. self.A is my list a. and item is x that
> I am trying to insert.
> So it needs to be of type item not (self.f(item), item)
> It doesn't say anything pass sorting function self.f(item).
That's correct. You are passing a tuple of (sort_key, actual_data).
Example use case: caseless sortorder but you want to retrieve the
original data. f is lambda x: x.upper() or similar. Your data is
'foo', 'Bar', 'zOt'. Calls to your_queue.append will result in the
following 2nd args for bisect.insort:
Consider executing the code with a couple of print statements in it so
that you can see what is happening.
More information about the Python-list