Advertisement
Working with lists in Python is pretty common, and looping through them is one of those things you do all the time without even thinking about it. Whether you’re trying to clean up data, build something new, or just explore what’s in a list, there are a few clean and easy ways to get through each element. The great thing about Python is that it keeps things readable no matter how you choose to do it. Some ways are more readable, some are faster, and some give you a bit more control.
Let’s look at different ways to iterate through a list in Python. You don’t need to follow a specific order — just pick the one that fits what you’re doing.
This is the most direct and readable way to go through a list. It doesn’t care about index numbers unless you ask for them — it just gives you the items one by one.
python
CopyEdit
fruits = ['apple', 'banana', 'cherry']
for fruit in fruits:
print(fruit)
You get each item straight from the list, so there is no need to worry about positions or ranges. It's simple, clean, and probably the most widely used option.
If you do need the index — maybe because you're updating elements or checking positions — then combining range() with indexing is helpful.
python
CopyEdit
fruits = ['apple', 'banana', 'cherry']
for i in range(len(fruits)):
print(f"Index {i}: {fruits[i]}")
This one gives you access to both the index and the item. It’s slightly longer than the direct for loop, but it works better when position matters.
If you want both the index and the item but want to keep things tidy, enumerate() is your friend. It gives you everything you get from range(len(...)) but in a cleaner way.
python
CopyEdit
fruits = ['apple', 'banana', 'cherry']
for index, fruit in enumerate(fruits):
print(f"Index {index}: {fruit}")
This way is often preferred over range(len(...)) since it’s more readable and made for exactly this kind of task.
It is not as common for simple list iteration, but it is still valid. A while loop is more flexible and lets you control the flow manually. It’s useful when the loop conditions might change in more complex situations.
python
CopyEdit
fruits = ['apple', 'banana', 'cherry']
i = 0
while i < len(fruits):
print(fruits[i])
i += 1
Here, you have full control. You decide when to start and when to stop. It’s a bit longer but works when the loop needs more logic inside.
This one is mostly used when you’re building a new list or running a short action. It's compact and makes the loop a one-liner.
python
CopyEdit
fruits = ['apple', 'banana', 'cherry']
[print(fruit) for fruit in fruits]
Technically, this runs the loop and prints each item. But list comprehensions are better when you’re collecting results, not just printing. For example:
python
CopyEdit
uppercase_fruits = [fruit.upper() for fruit in fruits]
This will give you a new list with all items in uppercase.
When you want to apply a function to every element and get a new list out of it, map() works well. It’s fast and functional, especially when the transformation is straightforward.
python
CopyEdit
fruits = ['apple', 'banana', 'cherry']
def to_uppercase(word):
return word.upper()
result = list(map(to_uppercase, fruits))
print(result)
Or you can use a lambda to keep it short:
python
CopyEdit
result = list(map(lambda x: x.upper(), fruits))
Keep in mind, map() doesn’t work well when you just want to print or do something for each item — it’s best when you're generating something.
Every list in Python has an internal iterator that you can access with the iter() function. It's rarely used for everyday tasks, but it's useful if you're managing the loop step-by-step or building custom logic.
python
CopyEdit
fruits = ['apple', 'banana', 'cherry']
it = iter(fruits)
print(next(it)) # 'apple'
print(next(it)) # 'banana'
print(next(it)) # 'cherry'
This lets you move through the list one item at a time. If you try to go past the last item, you’ll get a StopIteration error. This is mostly used in special cases, like custom loops or when working with generators.
This one's not very common for list iteration, but it does work, especially when you're dealing with nested lists or data that needs recursive handling.
python
CopyEdit
def print_items(lst, index=0):
if index < len(lst):
print(lst[index])
print_items(lst, index + 1)
fruits = ['apple', 'banana', 'cherry']
print_items(fruits)
It’s a little more effort than it’s worth in most cases, but it shows another way to move through the list when needed.
If you’re working with two lists side-by-side and want to loop through both at once, zip() makes it easy. You can iterate through two or more sequences at the same time.
python
CopyEdit
fruits = ['apple', 'banana', 'cherry']
colors = ['red', 'yellow', 'dark red']
for fruit, color in zip(fruits, colors):
print(f"{fruit} is {color}")
It's clean and keeps both lists in sync while you work with them together. If the lists are of different lengths, they stop at the shortest one.
This one’s useful when you’re working with a large list and need to remove items as you go. deque lets you pop from the front efficiently.
python
CopyEdit
from collections import deque
fruits = deque(['apple', 'banana', 'cherry'])
while fruits:
print(fruits.popleft())
This modifies the list as you go, which might be exactly what you want when processing queues or streaming items. It's not a standard list, but it works almost the same for iteration purposes.
There’s no one right way to loop through a list in Python. It really depends on whether you need the index, want to keep the code compact, or care about memory and speed. The options above give you control, simplicity, and flexibility — so whether you’re writing something quick or building out something more involved, you’ve got the tools to handle it neatly.
Advertisement
Need to share a ChatGPT chat? Whether it’s for work, fun, or team use, here are 7 simple ways to copy, link, or export your conversation clearly
Learn 10 clean and effective ways to iterate over a list in Python. From simple loops to advanced tools like zip, map, and deque, this guide shows you all the options
Struggling with Copilot's cost or limits? Explore smarter alternative AI tools with your desired features and workflow.
Salesforce brings generative AI to the Financial Services Cloud, transforming banking with smarter automation and client insights
Highlighting top generative AI tools and real-world examples that show how they’re transforming industries.
Discover how to install and set up Copilot for Microsoft 365 easily with our step-by-step guide for faster productivity.
Learn how to connect Kafka to MongoDB and build a simple, reliable data pipeline that moves real-time messages into a NoSQL database efficient-ly
Need to save your pandas DataFrame as a CSV file but not sure which method fits best? Here are all the practical ways to do it—simple, flexible, and code-ready
Discover Oracle’s GenAI: built-in LLMs, data privacy guarantees, seamless Fusion Cloud integration, and more.
Learn how to use matplotlib.pyplot.subplots() in Python to build structured layouts with multiple charts. A clear guide for creating and customizing Python plots in one figure
Discover different methods to check if an element exists in a list in Python. From simple techniques like using in to more advanced methods like binary search, explore all the ways to efficiently check membership in a Python list
Compare Intel’s AI Gaudi 3 chip with Nvidia’s latest to see which delivers better performance for AI workloads.