How can I get rid of multiple nested for loops?

前端 未结 2 1085
你的背包
你的背包 2021-01-25 00:21

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         


        
相关标签:
2条回答
  • 2021-01-25 01:06

    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

    0 讨论(0)
  • 2021-01-25 01:13

    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.

    0 讨论(0)
提交回复
热议问题