How do you pass a standard operator such as '<' as a parameter?

Peter Milliken peterm at resmed.com.au
Thu Nov 20 16:13:03 EST 2003


I am creating a subclass of list that will allow 'ordered' lists via the
addition of a new method ('add' for want of a better name :-)). Since I want
to make it as generic as possible, I want to pass the comparator function as
an argument at initialisation. It would be used line this:

y = OrderedList([], LessThanFunction)

y.add(9)
y.add(8)
y.add(11)

y

[8,9,11]



So the class definition would look like this:

        class OrderedList (list):
          def __init__ (self, comparator):
            list.__init__(self)
            self.ComparisonFunction = comparator

          def add (self, element):
            """Add the element into the list in the correct ordered sequence
for
            the data type.
            """
            # Locate the position in the list and perform the insertion
            for i in list(self):
              if self.ComparisonFunction(element, i):
                list.insert(self, list.index(self, i), element)
                break
            else:
              # element is greater than any current value in the list, so
stick
              # it at the end.
              list.append(self, element)


For non-standard data types, you would obviously define a '<' function and
then pass it as a parameter at initialisation, but how can you pass one of
the standard operators? i.e. '<'.

For instance, to create an ordered list of integers, I would like to
instantiate new objects using something like this:

  y = OrderedList([], <)

However, this results in a syntax error. Is there anyway to pass the '<'
operator itself? I fully realise that you could create a "lessthan"
function, either explicitly or as a lamdba, but my curiousity bump is
itching and I would like to know how to pass one of the standard operators.

Thanks
Peter






More information about the Python-list mailing list