如何使用python生成完整的组合因子?是否有一个花式itertools
函数可以生成一个完整的阶乘?Python:如何生成全因子组合?
我画了一个空白,想不到另一种方式来描述这个比“完全因子的组合”,所以我的搜索努力没有出现任何相关。这里有什么正确的术语?搜索已经结合了某些长度的组合,但那不是我所追求的。长度由多少因素决定。
奖励:如何排除某些组合?如何处理任意数量级别的任意数量的因素,条件是“levels”不一定是字符串,而是任何python对象?
比方说,我有5个因素,每个因素有两个或更多的水平。在这种情况下,我有三个两级因素和两个三级因素。组合的全因子将具有(2^3)*(3^2)= 8 * 9 = 72个组合。请记住,X1
中的"L1"
与X2
中的"L1"
不同。
输入:
X1 = ["L1", "L2"]
X2 = ["L1", "L2", "L3"]
X3 = ["L1", "L2"]
X4 = ["L1", "L2"]
X5 = ["L1", "L2", "L3"]
full_factorial_combinations = itertools.fancyfunction(X1, X2, X3, X4, X5)
full_factorial_combinations #optionally produces a generator instead of list of tuples shown here
输出:
[("L1", "L1", "L1", "L1", "L1"),
("L1", "L1", "L1", "L1", "L2"),
("L1", "L1", "L1", "L1", "L3"),
("L1", "L1", "L1", "L2", "L1"),
("L1", "L1", "L1", "L2", "L2"),
("L1", "L1", "L1", "L2", "L3"),
("L1", "L1", "L2", "L1", "L1"),
("L1", "L1", "L2", "L1", "L2"),
("L1", "L1", "L2", "L1", "L3"),
("L1", "L1", "L2", "L2", "L1"),
("L1", "L1", "L2", "L2", "L2"),
("L1", "L1", "L2", "L2", "L3"),
("L1", "L2", "L1", "L1", "L1"),
("L1", "L2", "L1", "L1", "L2"),
("L1", "L2", "L1", "L1", "L3"),
("L1", "L2", "L1", "L2", "L1"),
("L1", "L2", "L1", "L2", "L2"),
("L1", "L2", "L1", "L2", "L3"),
("L1", "L2", "L2", "L1", "L1"),
("L1", "L2", "L2", "L1", "L2"),
("L1", "L2", "L2", "L1", "L3"),
("L1", "L2", "L2", "L2", "L1"),
("L1", "L2", "L2", "L2", "L2"),
("L1", "L2", "L2", "L2", "L3"),
("L1", "L3", "L1", "L1", "L1"),
("L1", "L3", "L1", "L1", "L2"),
("L1", "L3", "L1", "L1", "L3"),
("L1", "L3", "L1", "L2", "L1"),
("L1", "L3", "L1", "L2", "L2"),
("L1", "L3", "L1", "L2", "L3"),
("L1", "L3", "L2", "L1", "L1"),
("L1", "L3", "L2", "L1", "L2"),
("L1", "L3", "L2", "L1", "L3"),
("L1", "L3", "L2", "L2", "L1"),
("L1", "L3", "L2", "L2", "L2"),
("L1", "L3", "L2", "L2", "L3"),
("L2", "L1", "L1", "L1", "L1"),
("L2", "L1", "L1", "L1", "L2"),
("L2", "L1", "L1", "L1", "L3"),
("L2", "L1", "L1", "L2", "L1"),
("L2", "L1", "L1", "L2", "L2"),
("L2", "L1", "L1", "L2", "L3"),
("L2", "L1", "L2", "L1", "L1"),
("L2", "L1", "L2", "L1", "L2"),
("L2", "L1", "L2", "L1", "L3"),
("L2", "L1", "L2", "L2", "L1"),
("L2", "L1", "L2", "L2", "L2"),
("L2", "L1", "L2", "L2", "L3"),
("L2", "L2", "L1", "L1", "L1"),
("L2", "L2", "L1", "L1", "L2"),
("L2", "L2", "L1", "L1", "L3"),
("L2", "L2", "L1", "L2", "L1"),
("L2", "L2", "L1", "L2", "L2"),
("L2", "L2", "L1", "L2", "L3"),
("L2", "L2", "L2", "L1", "L1"),
("L2", "L2", "L2", "L1", "L2"),
("L2", "L2", "L2", "L1", "L3"),
("L2", "L2", "L2", "L2", "L1"),
("L2", "L2", "L2", "L2", "L2"),
("L2", "L2", "L2", "L2", "L3"),
("L2", "L3", "L1", "L1", "L1"),
("L2", "L3", "L1", "L1", "L2"),
("L2", "L3", "L1", "L1", "L3"),
("L2", "L3", "L1", "L2", "L1"),
("L2", "L3", "L1", "L2", "L2"),
("L2", "L3", "L1", "L2", "L3"),
("L2", "L3", "L2", "L1", "L1"),
("L2", "L3", "L2", "L1", "L2"),
("L2", "L3", "L2", "L1", "L3"),
("L2", "L3", "L2", "L2", "L1"),
("L2", "L3", "L2", "L2", "L2"),
("L2", "L3", "L2", "L2", "L3")]
docs链接:https://docs.python.org/3.6/library/itertools.html#itertools.product – Will