如何使用python生成完整的因子组合?是否有一个花哨的itertools
函数可以生成一个完整的阶乘?
我正在画一个空白,除了“完全因子组合”之外,我想不出另一种方式来描述这个,所以我的搜索工作已经没有任何相关性了。这里的术语是什么?搜索已经出现了一定长度的组合,但这不是我追求的。长度由因子数决定。
奖金:如何排除某些组合?如何处理具有任意数量级别的任意数量的因子,条件是“级别”不一定是字符串而是任何python对象?
假设我有5个因子,每个因子有两个或更多个等级。在这种情况下,我有3个两级因子和2个三级因子。组合的全因子将具有(2 ^ 3)*(3 ^ 2)= 8 * 9 = 72种组合。请注意,"L1"
中的X1
与"L1"
中的X2
不同。
输入:
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")]
答案 0 :(得分:2)
这被称为笛卡尔积,由itertools.product
实现。
itertools.product(X1, X2, X3, X4, X5)
答案 1 :(得分:0)
这是工作代码:
import itertools
X1 = ["L1", "L2"]
X2 = ["L1", "L2", "L3"]
X3 = ["L1", "L2"]
X4 = ["L1", "L2"]
X5 = ["L1", "L2", "L3"]
number=1
for combination in itertools.product(X1,X2,X3,X4,X5):
print number, combination
number+=1
您可以轻松修改上述代码以执行所需任务。