Use the built-in function enumerate():

for idx, x in enumerate(xs):
    print(idx, x)

It is non-Pythonic to manually index via for i in range(len(xs)): x = xs[i] or manually manage an additional state variable.

Check out PEP 279 for more.

Answer from Mike Hordecki on Stack Overflow
Top answer
1 of 16
9270

Use the built-in function enumerate():

for idx, x in enumerate(xs):
    print(idx, x)

It is non-Pythonic to manually index via for i in range(len(xs)): x = xs[i] or manually manage an additional state variable.

Check out PEP 279 for more.

2 of 16
1372

Using a for loop, how do I access the loop index, from 1 to 5 in this case?

Use enumerate to get the index with the element as you iterate:

for index, item in enumerate(items):
    print(index, item)

And note that Python's indexes start at zero, so you would get 0 to 4 with the above. If you want the count, 1 to 5, do this:

count = 0 # in case items is empty and you need it after the loop
for count, item in enumerate(items, start=1):
    print(count, item)

Unidiomatic control flow

What you are asking for is the Pythonic equivalent of the following, which is the algorithm most programmers of lower-level languages would use:

index = 0            # Python's indexing starts at zero
for item in items:   # Python's for loops are a "for each" loop 
    print(index, item)
    index += 1

Or in languages that do not have a for-each loop:

index = 0
while index < len(items):
    print(index, items[index])
    index += 1

or sometimes more commonly (but unidiomatically) found in Python:

for index in range(len(items)):
    print(index, items[index])

Use the Enumerate Function

Python's enumerate function reduces the visual clutter by hiding the accounting for the indexes, and encapsulating the iterable into another iterable (an enumerate object) that yields a two-item tuple of the index and the item that the original iterable would provide. That looks like this:

for index, item in enumerate(items, start=0):   # default is zero
    print(index, item)

This code sample is fairly well the canonical example of the difference between code that is idiomatic of Python and code that is not. Idiomatic code is sophisticated (but not complicated) Python, written in the way that it was intended to be used. Idiomatic code is expected by the designers of the language, which means that usually this code is not just more readable, but also more efficient.

Getting a count

Even if you don't need indexes as you go, but you need a count of the iterations (sometimes desirable) you can start with 1 and the final number will be your count.

count = 0 # in case items is empty
for count, item in enumerate(items, start=1):   # default is zero
    print(item)

print('there were {0} items printed'.format(count))

The count seems to be more what you intend to ask for (as opposed to index) when you said you wanted from 1 to 5.


Breaking it down - a step by step explanation

To break these examples down, say we have a list of items that we want to iterate over with an index:

items = ['a', 'b', 'c', 'd', 'e']

Now we pass this iterable to enumerate, creating an enumerate object:

enumerate_object = enumerate(items) # the enumerate object

We can pull the first item out of this iterable that we would get in a loop with the next function:

iteration = next(enumerate_object) # first iteration from enumerate
print(iteration)

And we see we get a tuple of 0, the first index, and 'a', the first item:

(0, 'a')

we can use what is referred to as "sequence unpacking" to extract the elements from this two-tuple:

index, item = iteration
#   0,  'a' = (0, 'a') # essentially this.

and when we inspect index, we find it refers to the first index, 0, and item refers to the first item, 'a'.

>>> print(index)
0
>>> print(item)
a

Conclusion

  • Python indexes start at zero
  • To get these indexes from an iterable as you iterate over it, use the enumerate function
  • Using enumerate in the idiomatic way (along with tuple unpacking) creates code that is more readable and maintainable:

So do this:

for index, item in enumerate(items, start=0):   # Python indexes start at zero
    print(index, item)
🌐
W3Schools
w3schools.com › python › python_lists_loop.asp
Python - Loop Lists
Print all items, using a while loop to go through all the index numbers · thislist = ["apple", "banana", "cherry"] i = 0 while i < len(thislist): print(thislist[i]) i = i + 1 Try it Yourself » · Learn more about while loops in our Python While Loops Chapter. List Comprehension offers the shortest syntax for looping through lists:
Discussions

When using for loops are we iterating through the index or the actual values?
A "pure" for loop requires an index because you're just executing the same piece of code for whatever the range of that index is. What you're probably looking for is a foreach loop, which is really just syntactic sugar over a for loop that allows you to specify iterating over every member of a collection without defining an index. In Python it's a little different than a lot of other languages as there's no explicit foreach keyword. You just define your loop like: for season in seasons: More on reddit.com
🌐 r/learnprogramming
14
0
March 8, 2023
For loop in Python with indices - Stack Overflow
Copyfor idx,data in enumerate(... access the list using the index. both this and data will print the same thing · If you want to do a for loop with a set range, do this, Copyfor i in range(1,12+1): #need to do plus 1 because python is upper bound exclusive ... More on stackoverflow.com
🌐 stackoverflow.com
In a for in loop, i want to jump my index when 'x' happens. How can I do that?
For loops in python are more like forEach loops in most languages. You can use a while loop to archive what you want. Like java equivalent of python for loop would be: int[] nums = { 1, 2, 3, 4, 5 }; for (int num : nums) { System.out.println(num); num = 300; } } Which will run 5 times, no matter how hard you try to increment num. The i in your example isn't an index or anything, but a value from the list. More on reddit.com
🌐 r/learnprogramming
24
12
September 15, 2022
Why iterate over an array using the index?
You do it if there is something in your loop that will use an index rather than the elements of the array. For instance, sometimes you want to sample something from another array that is not your loop array A cleaner way to do it is by using enumerate function for i, item in enumerate(array): The index gets assigned to i and whatever element of the array gets assigned to item. This may also be a bad habit from Matlab, people that come from Matlab are more used to looping over indexes. More on reddit.com
🌐 r/learnpython
57
46
April 22, 2023
🌐
StrataScratch
stratascratch.com › blog › mastering-loop-iterations-python-for-loop-index-explained
Mastering Loop Iterations: Python For Loop Index Explained - StrataScratch
October 17, 2024 - Python's for loops are user-friendly but can drag with large datasets. Alternatives like vectorized operations in pandas often run faster. Using iloc[] or at[] inside loops can be costly because pandas shine with vectorized tasks, not explicit looping. If you must use it for loops, try enumerate(). It automatically tracks the index as you iterate, cutting out manual handling.
🌐
Reddit
reddit.com › r/learnprogramming › when using for loops are we iterating through the index or the actual values?
r/learnprogramming on Reddit: When using for loops are we iterating through the index or the actual values?
March 8, 2023 -
for i in range(10,20):
    print(i)

I understand that i is going through the values 10 to 20. I know there can be an index attached but why do we have to explicitly associate an index to a value to change the value we want?

seasons = ['fall','winter','spring','summer'] # works like the enurate function
    for i in range(len(seasons)):
        if seasons[i] == 'summer':
            seasons[i] = 'New season'
        print(i , seasons[i])

Why do we have to associate the index to change the actual value? What exactly are we looping through

🌐
Mimo
mimo.org › glossary › python › for-loop
Python For Loop: Syntax and Examples [Python Tutorial]
range() is a built-in function that creates a list of numbers starting at 0 and stopping before a specified integer. This makes the range function ideal for creating Python for loops with index variables.
🌐
Trey Hunner
treyhunner.com › 2016 › 04 › how-to-loop-with-indexes-in-python
How to loop with indexes in Python
This first creates a range corresponding to the indexes in our list (0 to len(colors) - 1). We can loop over this range using Python’s for-in loop (really a foreach). This provides us with the index of each item in our colors list, which is the same way that C-style for loops work.
Find elsewhere
🌐
Python Morsels
pythonmorsels.com › looping-with-indexes
Looping with indexes - Python Morsels
October 8, 2020 - If you don't need a counter, just use a for loop without any frills. But if you do need to count upward while looping, you can use Python's built-in enumerate function to help you do that counting.
🌐
GeeksforGeeks
geeksforgeeks.org › python › access-the-index-and-value-using-python-for-loop
Access the Index and Value using Python 'For' Loop - GeeksforGeeks
July 23, 2025 - Python programming language supports the different types of loops, the loops can be executed in different ways. Below are some of the examples by which we can access the index value in Python: ... In this method, we are using the range() function to generate indices and access values in a list by their position. ... # create a list of fruits fruits = ['apple', 'banana', 'orange'] print(&quot;Indices and Index value :&quot;) # Iterate over the indices of the list and access elements using indices for i in range(len(fruits)): print(f&quot;Index: {i}, Value: {fruits[i]}&quot;)
🌐
The New Stack
thenewstack.io › home › python indexing vs. for loops: what’s really faster?
Python Indexing vs. For Loops: What’s Really Faster? - The New Stack
July 10, 2025 - Looping with indexing is a way to iterate through a sequence (like a list, tuple or string) by looping over its indexes, then using those indexes to access each element. This method combines the structure of a for loop with the precision of ...
🌐
Sentry
sentry.io › sentry answers › python › accessing the index in a `for` loop in python
Accessing the Index in a `for` Loop in Python | Sentry
November 22, 2022 - So rather than saying “do this n times”, a foreach loop essentially says “do this to everything in the sequence”. For scenarios where we actually need the index or counter variable, we can use Python’s built-in enumerate function. The enumerate function returns an iterable.
🌐
Semrush
semrush.com › analytics › keywordoverview
python for loop with index
Keyword Overview is a free keyword checker tool that provides detailed analytics and ideas for any keyword.
🌐
Real Python
realpython.com › python-for-loop
Python for Loops: The Pythonic Way – Real Python
February 23, 2026 - To repeat code a number of times without processing the data of an iterable, use the for _ in range(times): construct. To do index-based iteration, you can use for index, value in enumerate(iterable): to access both index and item.
🌐
Tutorialspoint
tutorialspoint.com › python › python_for_loops.htm
Python - For Loops
In the following example, the for ... produce the following output − ... Python's list object is also an indexed sequence, and hence you can iterate over its items using a for loop....
🌐
Go
go.dev › doc › effective_go
Effective Go - The Go Programming Language
The HTTP server will invoke the method ServeHTTP of that type, with ArgServer as the receiver, which will in turn call ArgServer (via the invocation f(w, req) inside HandlerFunc.ServeHTTP). The arguments will then be displayed. In this section we have made an HTTP server from a struct, an integer, a channel, and a function, all because interfaces are just sets of methods, which can be defined for (almost) any type. We've mentioned the blank identifier a couple of times now, in the context of for range loops and maps.
🌐
Towards AI
pub.towardsai.net › advance-your-rag-with-a-multi-index-agent-4789478d4bec
Advance Your RAG with a Multi-Index Agent | by Lexi Base | Towards AI
April 24, 2026 - Because there are no more tool_calls, the loop breaks and the final answer is sent to you! Now, tell me, how cool is THAT!! So, putting it all together, given the prompt: Which recipe has 5 stars, can prep under 5 minutes and is high in potassium? We get this output, where we see each knowledge base has been queried to retrieve the final answer. ... I know this may seem like a lot, but you totally got this! Thanks for reading and let me know if you have any questions!
🌐
LeetCode
leetcode.com › problems › linked-list-cycle
Linked List Cycle - LeetCode
Can you solve this real interview question? Linked List Cycle - Given head, the head of a linked list, determine if the linked list has a cycle in it. There is a cycle in a linked list if there is some node in the list that can be reached again by continuously following the next pointer.
🌐
VisuAlgo
visualgo.net › en › array
Array - VisuAlgo
There are already lots of (simple) applications that we can do with unsorted array. ... For min/max, we can use O(N) linear search again; for k-th smallest/largest, we may need to use O(kN) algorithm1, We can use O(N^2) nested-loop to see if any two indices in A are the same,
🌐
Python documentation
docs.python.org › 3 › tutorial › controlflow.html
4. More Control Flow Tools — Python 3.14.6 documentation
(Yes, this is the correct code. Look closely: the else clause belongs to the for loop, not the if statement.) One way to think of the else clause is to imagine it paired with the if inside the loop. As the loop executes, it will run a sequence like if/if/if/else.
🌐
Intellipaat
intellipaat.com › home › blog › how to access the index value using for loop in python?
How to Access the Index Value using For Loop in Python?
August 1, 2025 - Here, the code creates a list of ... divisible by 2. Using the index() function it prints both the even numbers and the index of 7. In Python, the enumerate() method will give the both index and the value....