Skip to content Skip to sidebar Skip to footer

Pythonic Shortcut For Doubly Nested For Loops?

Consider if I had a function that took a tuple argument (x,y), where x was in the range(X), and y in the range(Y), the normal way of doing it would be: for x in range(X): for y

Solution 1:

You can use product from itertools

>>>from itertools import product>>>>>>for x,y in product(range(3), range(4)):...print (x,y)... 
(0, 0)
(0, 1)
(0, 2)
(0, 3)
(1, 0)
(1, 1)
(1, 2)
(1, 3)

...and so on

Your code would look like:

for x,y in product(range(X), range(Y)):
    function(x,y)

Solution 2:

You can use itertools.product():

from itertools import product
for xy inproduct(range(X), range(Y)):
    function(xy)

Solution 3:

Pythonic they are -> (modify according to your requirements)

>>>[ (x,y)   for x inrange(2)   for y inrange(2)]
[(0, 0), (0, 1), (1, 0), (1, 1)]

Generator version :

gen = ( (x,y)   for x in range(2)   for y in range(2) )
>>>for x,y in gen:...print x,y... 
0 0
0 1
1 0
1 1

Solution 4:

Try product from itertools: http://docs.python.org/library/itertools.html#itertools.product

from itertools import product

for x, y inproduct(range(X), range(Y)):
    function(x, y)

Solution 5:

from itertools import product

defsomething_like_range(*sizes):
    return product(*[range(size) for size in sizes])

for a usage close to what you wanted:

for x,y in something_like_range(X,Y):
    your_function(x,y)

=)

Post a Comment for "Pythonic Shortcut For Doubly Nested For Loops?"