Python - Find Index Containing String in List

When working with mixed-type lists in Python, you often need to find the indices containing strings. This is useful for text parsing, pattern matching, and extracting specific information from data structures.

Here's an example scenario:

my_list = [108, 'Safari', 'Skybags', 20, 60, 'Aristocrat', 78, 'Raj']
print("Original list:", my_list)
Original list: [108, 'Safari', 'Skybags', 20, 60, 'Aristocrat', 78, 'Raj']

The goal is to find indices 1, 2, 5, 7 where strings are located in this mixed list.

Using for loop with type() function

The most straightforward approach uses a for loop to check each element's type and collect string indices ?

fruit_list = ['Banana', 'Apple', 1000, 'Mango']
print("Original list:", fruit_list)
print("String indices:")

for i, item in enumerate(fruit_list):
    if type(item) is str:
        print(i)
Original list: ['Banana', 'Apple', 1000, 'Mango']
String indices:
0
1
3

Using isinstance() function

The isinstance() function provides a more robust way to check for string types ?

data_list = ['Vivek', 198, 200, 'Jayant', 'deep', 78]
print("Original list:", data_list)
print("String indices:")

for index, item in enumerate(data_list):
    if isinstance(item, str):
        print(index)
Original list: ['Vivek', 198, 200, 'Jayant', 'deep', 78]
String indices:
0
3
4

Finding All Occurrences of a Specific String

When searching for all indices of a particular string value, use this approach ?

def find_all_indices(target, search_list):
    indices = []
    start = 0
    
    while True:
        try:
            index = search_list.index(target, start)
            indices.append(index)
            start = index + 1
        except ValueError:
            break
    return indices

test_list = ["Python", "Java", "Python", "C++", "Python"]
result = find_all_indices("Python", test_list)
print(f"All indices of 'Python': {result}")
All indices of 'Python': [0, 2, 4]

List Comprehension Approach

For a more concise solution, use list comprehension ?

mixed_list = [108, 'Safari', 'Skybags', 20, 60, 'Aristocrat', 78, 'Raj']
string_indices = [i for i, item in enumerate(mixed_list) if isinstance(item, str)]

print("Original list:", mixed_list)
print("String indices:", string_indices)
Original list: [108, 'Safari', 'Skybags', 20, 60, 'Aristocrat', 78, 'Raj']
String indices: [1, 2, 5, 7]

Comparison

Method Best For Performance
type() with loop Exact type checking Good
isinstance() with loop Type hierarchy checking Good
List comprehension Concise, readable code Best

Conclusion

Use isinstance() for robust type checking and list comprehension for concise code. The enumerate() function simplifies index tracking while iterating through lists.

Updated on: 2026-03-27T12:21:43+05:30

2K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements