Customize the effect of enumerate()?

Simon Forman rogue_pedro at
Mon Oct 23 00:56:16 CEST 2006

Dustan wrote:
> Can I make enumerate(myObject) act differently?
> class A(object):
> 	def __getitem__(self, item):
> 		if item > 0:
> 	            return self.sequence[item-1]
> 	        elif item < 0:
> 	            return self.sequence[item]
> 	        elif item == 0:
> 	            raise IndexError, "Index 0 is not valid."
> 	        else:
> 	            raise IndexError, "Invalid Index."
> 	def __iter__(self): return iter(self.sequence)

That final else clause is a little funny...    What kind of indices are
you expecting that will be neither less than zero, greater than zero,
or equal to zero?

> Why the funny behavior, you ask? For my class A, it doesn't make sense
> to number everything the standard programming way. Of course, if
> someone uses enumerate, it's going to number the items the same way as
> ever. Is there any way to modify that behavior, any special function to
> set? There doesn't appear to be, according to the docs, but it never
> hurts to make sure.

You can write your own enumerate function and then bind that to the
name 'enumerate'.

More information about the Python-list mailing list