Article Categories
- All Categories
-
Data Structure
-
Networking
-
RDBMS
-
Operating System
-
Java
-
MS Excel
-
iOS
-
HTML
-
CSS
-
Android
-
Python
-
C Programming
-
C++
-
C#
-
MongoDB
-
MySQL
-
Javascript
-
PHP
-
Economics & Finance
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.
