Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Iterating in a closed range [a, b] in python

I want to iterate over a closed range of integers [a, b] in python, ie. iterating from a to b including both a and b.

I know the following way of doing it:

for i in range(a, b+1):
    do_something(i)

For iterating in the reverse direction (ie. in the order b, b-1, b-2, ..., a), I do the following:

for i in range(b, a-1, -1):
    do_something(i)

I don't like this addition (b+1 in the example) and subtraction (a-1 in the example) to reach the closed end of the range. I find it less readable than the c/c++/Java counterpart (usage of <= in a loop).

Do you have something in python which can be used to iterate between the closed ranges without manual intervention of the boundaries?

like image 835
krips89 Avatar asked Apr 21 '13 19:04

krips89


1 Answers

It's a simple matter to define your own function and use it:

def closed_range(start, stop, step=1):
  dir = 1 if (step > 0) else -1
  return range(start, stop + dir, step):

In action:

>>> list(closed_range(1, 10))
0: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> list(closed_range(1, 10, 2))
1: [1, 3, 5, 7, 9]
>>> list(closed_range(1, 10, 3))
2: [1, 4, 7, 10]
>>> list(closed_range(10, 1, -1))
3: [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
>>> list(closed_range(10, 1, -2))
4: [10, 8, 6, 4, 2]

Save to a .py file in \PythonXX\Lib\site-packages and then you can import it for use elsewhere.

like image 92
bbayles Avatar answered Sep 23 '22 08:09

bbayles