8

I want to do something like

for a in [0..1]:
    for b in [0..1]:
        for c in [0..1]:
            do something

But, I might have 15 different variables. Is there a simpler way like

for a, b, c in [0..1]:
    do something

Thanks for any help

GeoffDS
  • 1,221
  • 5
  • 19
  • 31

3 Answers3

12

itertools.product:

import itertools
for a,b,c in itertools.product([0, 1], repeat=3):
  # do something
phihag
  • 278,196
  • 72
  • 453
  • 469
  • 5
    My only complaint is it took so long for you to answer. There was a period of about 30 seconds where I was in limbo. – GeoffDS Aug 23 '11 at 16:22
4

You can iterate over the product of all of them. Use itertools.product and pass in your ranges.

import itertools
for i in itertools.product(range(2), range(3), range(2)):
print (i)

yields

(0, 0, 0)
(0, 0, 1)
(0, 1, 0)
(0, 1, 1)
(0, 2, 0)
(0, 2, 1)
(1, 0, 0)
(1, 0, 1)
(1, 1, 0)
(1, 1, 1) 
(1, 2, 0)
(1, 2, 1)
Anteru
  • 19,042
  • 12
  • 77
  • 121
1

It sounds like you have a matrix/list of variables you need to process. Thus, the best (and speediest) solution is to use a matrix/list tool.

Such as: The Python itertools package.

As other have hinted, itertools.product is probably what you want. But, see the full list at: http://docs.python.org/library/itertools.html

Good luck.

nonot1
  • 2,788
  • 4
  • 25
  • 41