Finding the index of an item in a list

后端 未结 30 3340
你的背包
你的背包 2020-11-21 05:28

Given a list [\"foo\", \"bar\", \"baz\"] and an item in the list \"bar\", how do I get its index (1) in Python?

30条回答
  •  梦如初夏
    2020-11-21 05:49

    If performance is of concern:

    It is mentioned in numerous answers that the built-in method of list.index(item) method is an O(n) algorithm. It is fine if you need to perform this once. But if you need to access the indices of elements a number of times, it makes more sense to first create a dictionary (O(n)) of item-index pairs, and then access the index at O(1) every time you need it.

    If you are sure that the items in your list are never repeated, you can easily:

    myList = ["foo", "bar", "baz"]
    
    # Create the dictionary
    myDict = dict((e,i) for i,e in enumerate(myList))
    
    # Lookup
    myDict["bar"] # Returns 1
    # myDict.get("blah") if you don't want an error to be raised if element not found.
    

    If you may have duplicate elements, and need to return all of their indices:

    from collections import defaultdict as dd
    myList = ["foo", "bar", "bar", "baz", "foo"]
    
    # Create the dictionary
    myDict = dd(list)
    for i,e in enumerate(myList):
        myDict[e].append(i)
    
    # Lookup
    myDict["foo"] # Returns [0, 4]
    

提交回复
热议问题