使用itertools生成列表列表的笛卡尔积

时间:2018-08-01 14:48:25

标签: python itertools

我正在尝试解决this post中提到的问题。考虑D=[d1,...,dm]的非负整数列表。我想要一组range(d1),...,range(dm)的笛卡尔积。例如,如果m=3我可以使用itertools:

 indices=[i for i in itertools.product(range(d1),range(d2),range(d3))]

如果您能帮助我知道如何使用indices以任意长度生成D,我们将不胜感激。

2 个答案:

答案 0 :(得分:4)

您可以使用mapD的所有项目映射到range,然后为product拆包:

indices=list(itertools.product(*map(range, D)))

答案 1 :(得分:2)

您可以使用*

[i for i in itertools.product(*map(range, D))]