list.index() like...but returning lists (for avoiding '0' on multiples hits)
Francis Avila
francisgavila at yahoo.com
Mon Dec 22 19:07:41 EST 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