Python Fastest way to find Indexes of item in list

前端 未结 6 1907
半阙折子戏
半阙折子戏 2020-12-19 06:50

If one was to attempt to find the indexes of an item in a list you could do it a couple different ways here is what I know to be the fastest

aList = [123, \'         


        
6条回答
  •  旧巷少年郎
    2020-12-19 07:15

    Use list.index(elem, start)! That uses a for loop in C (see it's implementation list_index_impl function in the source of CPython's listobject.c). Avoid looping through all the elements in Python, it is slower than in C.

    def index_finder(lst, item):
        """A generator function, if you might not need all the indices"""
        start = 0
        while True:
            try:
                start = lst.index(item, start)
                yield start
                start += 1
            except ValueError:
                break
    
    import array
    def index_find_all(lst, item, results=None):
        """If you want all the indices.
        Pass results=[] if you explicitly need a list,
        or anything that can .append(..)"""
        if results is None:
            length = len(lst)
            results = array.array('B') if length <= 2**8 else array.array('H') if length <= 2**16 else array.array('L') if length <= 2**32 else array.array('Q')
        start = 0
        while True:
            try:
                start = lst.index(item, start)
                results.append(start)
                start += 1
            except ValueError:
                return results
    
    # Usage example
    l = [1, 2, 3, 4, 5, 6, 7, 8] * 32
    
    print(*index_finder(l, 1))
    print(*index_find_all(l, 1))
    

提交回复
热议问题