list.index() like...but returning lists (for avoiding '0' on multiples hits)

Francis Avila francisgavila at yahoo.com
Tue Dec 23 01:07:41 CET 2003


John Roth wrote in message ...
>
>But what does that have to do with the question?
>
>As far as I know, there is no such built-in for lists.
>You can do something similar with the "re" module
>for strings, but not for lists.
>
>John Roth

More and more I am finding myself wishing for a neat way to *add*
functionality to a builtin.  Not subclass a builtin, but add methods to the
builtin type.

Like (the function does what the OP wants, btw):

>>> def indices(self, value):
...     return [i for i,v in enumerate(self) if v == value]
...
>>> list.indexes = indexes
>>> [0, 2, 2, 3].indexes(2)
[1, 2]

This currently gives:
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
    list.indexes=indexes
TypeError: can't set attributes of built-in/extension type 'list'


Oh well.  Anyway, the following might be faster:

def indices2(L, value):
    res = []
    last = -1 #below, last+1 to prevent infinite loop.
    try:
        while True:
            last = L.index(value, last+1)
            res.append(last)
    except ValueError:
        return res





More information about the Python-list mailing list