[Python-ideas] list.index() extension

Fredrik Johansson fredrik.johansson at gmail.com
Sun Apr 5 12:31:30 CEST 2009


On Sat, Apr 4, 2009 at 11:38 PM, Benjamin Peterson <benjamin at python.org> wrote:
> I would like to propose a extra parameter `predicate` to list.index() like this:
>
> def index(self, obj, predicate=operator.eq):
>    for idx, item in enumerate(self):
>        if predicate(item, obj):
>            return idx
>    raise IndexError
>
> My main use-case is 2to3 where a node has to locate its self in the parents node
> list by identity. Instead of writing out the search manually as is done now, it
> would be nice to just write `self.parent.nodes.index(self, operator.is_)`.
>
> I can also imagine this might be useful:
>
> print "The first number less than 5 in this list is %s" % (my_list.index(5,
> operator.lt),)

It would be more natural to pass a single predicate function than an argument
and a binary operator, as this is more general. I wouldn't mind predicate-based
index and count somewhere in the standard library.

Meanwhile, here is yet another solution (although not so efficient).

class match:
    def __init__(self, predicate):
        self.__eq__ = predicate

range(10,-10,-1).index(match(lambda x: x < 5))
range(10,-10,-1).count(match(lambda x: x < 5))

Fredrik



More information about the Python-ideas mailing list