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