python STL?

Andrew Dalke adalke at mindspring.com
Fri Nov 14 19:29:31 EST 2003


Ron Levine:
> [std::sort] ALREADy exists in the standard sort(lt) funciton,
> whose optional argument lt is any "less than" operator you care to
> define.

Not quite.  STL splits algorithms and containers.  Python's sort
is a method on native lists.  Suppose I make my own list-like data
structure which implements __getitem__ and __setitem__
etc. as needed for the container aspect of a list.  If I want to
sort those values I need to implement my own sort code,
with no ability to leverage the standard Python sort code.

Eg, suppose I had a fixed-width file where I can read/write
fields from the file and can replace entries, but cannot add
or delete fields.

class FileList:
  def __init__(self, filename):
    self.filename = filename
    self.infile = open(filename, "rwb")
    self._n = os.path.getsize(filename) / 40
  def __len__(self): return self._n
  def __getitem__(self, i):
    if not (0 <= i < self._n):
      raise IndexError(i)
    return self.infile.seek(i*40).read(40)
  def __setitem__(self, i, s):
    if not (0 <= i < self._n):
      raise IndexError(i)
    assert len(s) == 40
    self.infile.seek(i*40).write(s)

The idea is that a 'std::sort' *algorithm* should be
able to use this list-like container even though there's
no implementation similarity between it and native lists.

                    Andrew
                    dalke at dalkescientific.com






More information about the Python-list mailing list