Using Python's list index() method on a list of tuples or objects?
Question: Python's list type has an index() method that takes one parameter and returns
the index of the first item in the list matching the parameter. For instance:

    
    
    >>> some_list = ["apple", "pear", "banana", "grape"]
    >>> some_list.index("pear")
    1
    >>> some_list.index("grape")
    3
    

Is there a graceful (idiomatic) way to extend this to lists of complex
objects, like tuples? Ideally, I'd like to be able to do something like this:

    
    
    >>> tuple_list = [("pineapple", 5), ("cherry", 7), ("kumquat", 3), ("plum", 11)]
    >>> some_list.getIndexOfTuple(1, 7)
    1
    >>> some_list.getIndexOfTuple(0, "kumquat")
    2
    

getIndexOfTuple() is just a hypothetical method that accepts a sub-index and a
value, and then returns the index of the list item with the given value at
that sub-index. I hope

Is there some way to achieve that general result, using list comprehensions or
lambas or something "in-line" like that? I think I could write my own class
and method, but I don't want to reinvent the wheel if Python already has a way
to do it.


Answer: How about this?

    
    
    >>> tuple_list = [("pineapple", 5), ("cherry", 7), ("kumquat", 3), ("plum", 11)]
    >>> [x for x, y in enumerate(tuple_list) if y[1] == 7]
    [1]
    >>> [x for x, y in enumerate(tuple_list) if y[0] == 'kumquat']
    [2]
    

As pointed out in the comments, this would get all matches. To just get the
first one, you can do:

    
    
    >>> [y[0] for y in tuple_list].index('kumquat')
    2
    

There is a good discussion in the comments as to the speed difference between
all the solutions posted. I may be a little biased but I would personally
stick to a one-liner as the speed we're talking about is pretty insignificant
versus creating functions and importing modules for this problem, but if you
are planning on doing this to a very large amount of elements you might want
to look at the other answers provided, as they are faster than what I
provided.

