How to find all occurrences of an element in a list How to find all occurrences of an element in a list numpy numpy

How to find all occurrences of an element in a list


You can use a list comprehension:

indices = [i for i, x in enumerate(my_list) if x == "whatever"]

The iterator enumerate(my_list) yields pairs (index, item) for each item in the list. Using i, x as loop variable target unpacks these pairs into the index i and the list item x. We filter down to all x that match our criterion, and select the indices i of these elements.


While not a solution for lists directly, numpy really shines for this sort of thing:

import numpy as npvalues = np.array([1,2,3,1,2,4,5,6,3,2,1])searchval = 3ii = np.where(values == searchval)[0]

returns:

ii ==>array([2, 8])

This can be significantly faster for lists (arrays) with a large number of elements vs some of the other solutions.


A solution using list.index:

def indices(lst, element):    result = []    offset = -1    while True:        try:            offset = lst.index(element, offset+1)        except ValueError:            return result        result.append(offset)

It's much faster than the list comprehension with enumerate, for large lists. It is also much slower than the numpy solution if you already have the array, otherwise the cost of converting outweighs the speed gain (tested on integer lists with 100, 1000 and 10000 elements).

NOTE: A note of caution based on Chris_Rands' comment: this solution is faster than the list comprehension if the results are sufficiently sparse, but if the list has many instances of the element that is being searched (more than ~15% of the list, on a test with a list of 1000 integers), the list comprehension is faster.