How to Find Index of Element in List in Python

What you’ll build or solve

You’ll find the position of an item in a Python list using the right approach for your case.

When this approach works best

Finding an index in a list works well when you:

  • Locate a value so you can update or remove it, like replacing a status in a list.
  • Find where an item appears to split or slice a list, like everything after a marker.
  • Search for the first item that matches a rule, like the first even number or the first file ending in .csv.

Skip this approach if you need fast lookups in a large collection. Lists scan from left to right, so repeated searches can get slow. A dictionary or a set is often better for frequent lookups.

Prerequisites

  • Python 3 installed
  • You know what a list is

Step-by-step instructions

1) Get the first index with list.index()

Use list.index() when you want the first position of an exact value.

colors= ["blue","green","purple","green"]
i=colors.index("green")

print(i)

What to look for: .index() returns the first match only. If the value appears multiple times, you won’t get the later positions.


2) Handle missing values safely

If the item might not be in the list, index() raises ValueError. Catch it or check first.

Option A (common): try/except ValueError

colors= ["blue","green","purple"]

try:
i=colors.index("red")
exceptValueError:
i=-1

print(i)

Option B: Check with in before calling index()

colors= ["blue","green","purple"]

if"red"incolors:
i=colors.index("red")
else:
i=-1

print(i)

What to look for: Returning -1 is a common pattern, but you can also return None if you want to make “not found” more explicit.


3) Find an index by condition

When you need a rule instead of an exact value, loop with enumerate() and stop at the first match.

nums= [3,8,12,7,5]

index_even=None
fori,ninenumerate(nums):
ifn%2==0:
index_even=i
break

print(index_even)

What to look for: break matters. Without it, you’ll end up with the last matching index, not the first.


Examples you can copy

Example 1: Find the index, then update the value

status= ["todo","in_progress","done"]

i=status.index("in_progress")
status[i]="blocked"

print(status)

Example 2: Get all indexes of a value

colors= ["blue","green","purple","green","green"]
indexes= [ifori,cinenumerate(colors)ifc=="green"]

print(indexes)

Example 3: Find the index within a slice

This example uses index()’s optional start parameter to begin searching from a specific position.

items= ["a","b","c","b","d"]

first_b=items.index("b")
second_b=items.index("b",first_b+1)

print(first_b,second_b)

Example 4: Find the index of the first item that matches a rule

names= ["","  ","Amina","Luka"]

first_non_empty=None
fori,nameinenumerate(names):
ifname.strip():
first_non_empty=i
break

print(first_non_empty)

Example 5: Find the index of the minimum or maximum value

nums= [10,4,25,7]

min_i=nums.index(min(nums))
max_i=nums.index(max(nums))

print(min_i,max_i)

Common mistakes and how to fix them

Mistake 1: Assuming index() returns -1 when not found

What you might do:

colors= ["blue","green","purple"]
i=colors.index("red")

Why it breaks: index() raises ValueError if the value isn’t present.

Correct approach:

colors= ["blue","green","purple"]

try:
i=colors.index("red")
exceptValueError:
i=-1

print(i)

Mistake 2: Getting the wrong index when the value appears multiple times

What you might do:

colors= ["blue","green","purple","green"]
i=colors.index("green")

Why it breaks: index() returns the first match, not the last or all matches.

Correct approach (all matches):

colors= ["blue","green","purple","green"]
indexes= [ifori,cinenumerate(colors)ifc=="green"]

print(indexes)

Correct approach (next match):

colors= ["blue","green","purple","green"]
first=colors.index("green")
second=colors.index("green",first+1)

print(first,second)

Mistake 3: Forgetting break when searching by condition

What you might do:

nums= [3,8,12,7,5]
index_even=None

fori,ninenumerate(nums):
ifn%2==0:
index_even=i

Why it breaks: The loop keeps going, so you end up with the last matching index, not the first.

Correct approach:

nums= [3,8,12,7,5]
index_even=None

fori,ninenumerate(nums):
ifn%2==0:
index_even=i
break

print(index_even)

Troubleshooting

If you see ValueError: x is not in list, the value isn’t present. Wrap index() in try/except or check with in first.

If your code returns the wrong index, confirm whether you wanted the first match, the last match, or all matches.

If a condition-based search returns None, no element matched the condition. Print the list and the condition to verify your expectations.

If performance is slow, avoid repeated list.index() calls in large lists. Consider building a dictionary that maps values to indexes.


Quick recap

  • Use my_list.index(value) for the first exact match.
  • Handle missing values with try/except ValueError or if value in my_list.
  • Use enumerate() to find an index by condition.
  • Use a comprehension with enumerate() to get all matching indexes.
  • Use the start argument to find the next occurrence.