Find all index position in list based on partial string inside item in list

Question:

mylist = ["aa123", "bb2322", "aa354", "cc332", "ab334", "333aa"]

I need the index position of all items that contain 'aa'. I’m having trouble combining enumerate() with partial string matching. I’m not even sure if I should be using enumerate.

I just need to return the index positions: 0,2,5

Asked By: L Shaw

||

Answers:

Your idea to use enumerate() was correct.

indices = []
for i, elem in enumerate(mylist):
    if 'aa' in elem:
        indices.append(i)

Alternatively, as a list comprehension:

indices = [i for i, elem in enumerate(mylist) if 'aa' in elem]
Answered By: pemistahl

You can use enumerate inside a list-comprehension:

indices = [i for i, s in enumerate(mylist) if 'aa' in s]

Without enumerate():

>>> mylist = ["aa123", "bb2322", "aa354", "cc332", "ab334", "333aa"]
>>> l = [mylist.index(i) for i in mylist if 'aa' in i]
>>> l
[0, 2, 5]
Answered By: TerryA
spell_list = ["Tuesday", "Wednesday", "February", "November", "Annual", "Calendar", "Solstice"]

index=spell_list.index("Annual")
print(index)
Answered By: user11167492

Based on this answer, I’d like to show how to "early exit" the iteration once the first item containing the substring aa is encountered. This only returns the first position.

import itertools
first_idx = len(tuple(itertools.takewhile(lambda x: "aa" not in x, mylist)))

This should be much more performant than looping over the whole list when the list is large, since takewhile will stop once the condition is False for the first time.

I know that the question asked for all positions, but since there will be many users stumbling upon this question when searching for the first substring, I’ll add this answer anyways.

Answered By: JE_Muc
Categories: questions Tags: , , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.