更好地相当于这个疯狂的嵌套python for循环

Bab*_*bak 8 python recursion generator nested-loops

for a in map:
    for b in map[a]:
        for c in map[b]:
            for d in map[c]:
                for e in map[d]:
                    print a+b+c+d+e
Run Code Online (Sandbox Code Playgroud)

上面的代码用于在图形中创建一定长度的所有路径.map [a]表示从a点可以到达的点.

如何更改它以模拟具有任意数量的循环?

这就像笛卡尔积(itertools.product),在每次迭代中,您对下一个元素的选择仅限于map [current_point]中的选择.

Baf*_*ois 6

map = {
    'a': ['b', 'c'],
    'b': ['c', 'd'],
    'c': ['d', 'a'],
    'd': []
}

def print_paths(map, start, length, prefix = ''):
    if length == 0:
        print prefix
    else:
        for a in map[start]:
            print_paths(map, a, length - 1, prefix + start)

for a in map.keys():
    print_paths(map, a, 5)
Run Code Online (Sandbox Code Playgroud)