Efficient processing of large nuumeric data file

Steven D'Aprano steve at REMOVE-THIS-cybersource.com.au
Fri Jan 18 23:41:52 CET 2008

On Fri, 18 Jan 2008 12:06:56 -0600, Tim Chase wrote:

> I don't know how efficient len() is (if it's internally linearly
> counting the items in data, or if it's caching the length as data is
> created/assigned/modifed)

It depends on what argument you pass to len().

Lists, tuples and dicts (and maybe strings?) know how long they are, so 
len() takes essentially constant time.

Custom classes are free to define __len__ anyway they like.

class MyList(list):
    """Just like the built-in list, but stupider."""
    def __len__(self):
        # Untested, for obvious reasons.
        import random
        import sys
        while True:
            guess = random.randrange(0, sys.maxint)
            count = 0
            for i in self:
                count += 1
            if count == guess:
                return count

Caching __len__ is left as an exercise to the reader...


More information about the Python-list mailing list