I have a Python (3.2) script that searches for points with a property that I want. But it has this ugly part:
for x in range(0,p):
for y in range(0,p):
for z in range(0,p):
for s in range(0,p):
for t in range(0,p):
for w in range(0,p):
for u in range(0,p):
if isagoodpoint(x,y,z,s,t,w,u,p):
print(x,y,z,s,t,w,u)
else:
pass
Is there something I can do so that it looks a bit better?
You can use itertools to simplify your code:
from itertools import product
def print_good_points(p, dimensions=7):
for coords in product(range(p), repeat=dimensions):
args = coords + (p,)
if isagoodpoint(*args):
print(*coords)
That solves your problem as stated; however, I'm not sure that you really wanted to include p
in the arguments to isagoodpoint()
. If not, you can lose the line that adds it:
from itertools import product
def print_good_points(p, dimensions=7):
for coords in product(range(p), repeat=dimensions):
if isagoodpoint(*coords):
print(*coords)
The lines in your code
else:
pass
do nothing, by the way. Also, range(0, p)
is equivalent to range(p)
.
And ... just in case this use of *
in function calls is unfamiliar to you:
http://docs.python.org/3.2/reference/expressions.html#index-34
You can use something along the lines of:
for x, y, z in product(range(0,p), range(0,p), range(0,p)):
print(x,y,z)
or
for x, y, z in product(range(0,p), repeat=3):
print(x,y,z)
For python2.7
you need to from itertools import product
.