没有isinstance的列表列表中的python递归(不同)

pyt*_*oob 2 python recursion

我有一个任意(但统一)数字列表的任意列表.(它们是我想要绘制角的n空间中的区间的边界坐标,但这并不重要.)我想生成所有可能组合的列表.所以:[[1,2],[3,4],[5,6]]产生[[1,3,5],[1,3,6],[1,4,5],[1, 4,6],[1,2,3,5] ...].

任何人都可以帮我改进这段代码吗?我不喜欢isinstance()调用,但是当第一个arg(pos)是一个数字列表而不是列表时,我无法想出更多的python-ish方法来在第一遍传递元素列表

def recurse(pos, vals):
    out = []
    for p in pos:
        pl = p if isinstance(p,list) else [p]
        for x in vals[0]:
            out.append(pl + [x])
    if vals[1:]:
        return recurse(out, vals[1:])
    else:
        return out


a = [[1,2,3],[4,5,6],[7,8,9],[11,12,13]]

b = recurse(a[0], a[1:])
Run Code Online (Sandbox Code Playgroud)

谢谢.

Joc*_*zel 6

从你的例子看,你想要的就是它

from itertools import product
a = [[1,2,3],[4,5,6],[7,8,9],[11,12,13]]
print list(product(*a))
Run Code Online (Sandbox Code Playgroud)