Loop backwards using indices in Python?
PythonLoopsPython Problem Overview
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.
Python Solutions
Solution 1 - Python
Try range(100,-1,-1)
, the 3rd argument being the increment to use (documented here).
("range" options, start, stop, step are documented here)
Solution 2 - Python
In my opinion, this is the most readable:
for i in reversed(xrange(101)):
print i,
Solution 3 - Python
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]
Solution 4 - Python
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
Solution 5 - Python
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)
Solution 6 - Python
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.
Solution 7 - Python
The simple answer to solve your problem could be like this:
for i in range(100):
k = 100 - i
print(k)
Solution 8 - Python
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)
Solution 9 - Python
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
Solution 10 - Python
for var in range(10,-1,-1)
works
Solution 11 - Python
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
Solution 12 - Python
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
Solution 13 - Python
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
Solution 14 - Python
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')
Solution 15 - Python
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])
Solution 16 - Python
It works well with me
for i in range(5)[::-1]:
print(i,end=' ')
output : 4 3 2 1 0
Solution 17 - Python
a = 10
for i in sorted(range(a), reverse=True):
print i