Loop backwards using indices in Python?

The Question :

315 people think this question is useful

I am trying to loop from 100 to 0. How do I do this in Python?

for i in range (100,0) doesn’t work.

The Question Comments :
  • BTW, you probably want to loop from 99 to 0, and rarely from 100 to 0. This affects the answers.
  • @Acumenus That was exactly what I searched for when reached here. And for the record the solution is to simply write: range(100)[::-1] (which is automatically translated to range(9, -1, -1)) – Tested in python 3.7

The Answer 1

435 people think this answer is useful

Try range(100,-1,-1), the 3rd argument being the increment to use (documented here).

(“range” options, start, stop, step are documented here)

The Answer 2

209 people think this answer is useful

In my opinion, this is the most readable:

for i in reversed(xrange(101)):
    print i,

The Answer 3

40 people think this answer is useful
for i in range(100, -1, -1)

and some slightly longer (and slower) solution:

for i in reversed(range(101))

for i in range(101)[::-1]

The Answer 4

18 people think this answer is useful

Generally in Python, you can use negative indices to start from the back:

numbers = [10, 20, 30, 40, 50]
for i in xrange(len(numbers)):
    print numbers[-i - 1]

Result:

50
40
30
20
10

The Answer 5

12 people think this answer is useful

Why your code didn’t work

You code for i in range (100, 0) is fine, except

the third parameter (step) is by default +1. So you have to specify 3rd parameter to range() as -1 to step backwards.

for i in range(100, -1, -1):
    print(i)

NOTE: This includes 100 & 0 in the output.

There are multiple ways.

Better Way

For pythonic way, check PEP 0322.

This is Python3 pythonic example to print from 100 to 0 (including 100 & 0).

for i in reversed(range(101)):
    print(i)

The Answer 6

6 people think this answer is useful

Another solution:

z = 10
for x in range (z):
   y = z-x
   print y

Result:

10
9
8
7
6
5
4
3
2
1

Tip: If you are using this method to count back indices in a list, you will want to -1 from the ‘y’ value, as your list indices will begin at 0.

The Answer 7

5 people think this answer is useful

The simple answer to solve your problem could be like this:

for i in range(100):
    k = 100 - i
    print(k)

The Answer 8

1 people think this answer is useful

for var in range(10,-1,-1) works

The Answer 9

1 people think this answer is useful

Short and sweet. This was my solution when doing codeAcademy course. Prints a string in rev order.

def reverse(text):
    string = ""
    for i in range(len(text)-1,-1,-1):
        string += text[i]
    return string    

The Answer 10

1 people think this answer is useful

You can always do increasing range and subtract from a variable in your case 100 - i where i in range( 0, 101 ).

for i in range( 0, 101 ):
    print 100 - i

The Answer 11

1 people think this answer is useful

I wanted to loop through a two lists backwards at the same time so I needed the negative index. This is my solution:

a= [1,3,4,5,2]
for i in range(-1, -len(a), -1):
    print(i, a[i])

Result:

-1 2
-2 5
-3 4
-4 3
-5 1

The Answer 12

0 people think this answer is useful

I tried this in one of the codeacademy exercises (reversing chars in a string without using reversed nor :: -1)

def reverse(text):
    chars= []
    l = len(text)
    last = l-1
    for i in range (l):
        chars.append(text[last])
        last-=1

    result= ""   
    for c in chars:
        result += c
    return result
print reverse('hola')

The Answer 13

0 people think this answer is useful

Oh okay read the question wrong, I guess it’s about going backward in an array? if so, I have this:

array = ["ty", "rogers", "smith", "davis", "tony", "jack", "john", "jill", "harry", "tom", "jane", "hilary", "jackson", "andrew", "george", "rachel"]


counter = 0   

for loop in range(len(array)):
    if loop <= len(array):
        counter = -1
        reverseEngineering = loop + counter
        print(array[reverseEngineering])

The Answer 14

0 people think this answer is useful

You might want to use the reversed function in python. Before we jump in to the code we must remember that the range function always returns a list (or a tuple I don’t know) so range(5) will return [0, 1, 2, 3, 4]. The reversed function reverses a list or a tuple so reversed(range(5)) will be [4, 3, 2, 1, 0] so your solution might be:

for i in reversed(range(100)):
    print(i)

The Answer 15

-1 people think this answer is useful

You can also create a custom reverse mechanism in python. Which can be use anywhere for looping an iterable backwards

class Reverse:
    """Iterator for looping over a sequence backwards"""
    def __init__(self, seq):
        self.seq = seq
        self.index = len(seq)

    def __iter__(self):
        return self

    def __next__(self):
        if self.index == 0:
            raise StopIteration
        self.index -= 1
        return self.seq[self.index]


>>> d = [1,2,3,4,5]
>>> for i in Reverse(d):
...   print(i)
... 
5
4
3
2
1

The Answer 16

-2 people think this answer is useful
a = 10
for i in sorted(range(a), reverse=True):
    print i

Add a Comment