考虑到递归也好,还是别的方法,没办法在效率方面达到一个比较好的均衡,于是用推符号语句然后评估表达式的方式实现了这样的笛卡尔积
A = list(range(4))
B = [chr(i) for i in range(65,65+4)]
A,B
def productExpr(*D,typekey='python'):
m = len(D)
symbol_index = {i:chr(i) for i in range(97,97+m)}
symbol1 = "".join(["{}{}{}{}{}".format(" for " ,symbol_index[i]," in D[" ,i-97,"] ") for i in symbol_index])
symbol2 = "".join(["{}{}".format(",",symbol_index[i]) for i in symbol_index])[1:]
temp_expression = "{}{}{}{}{}{}".format("{","(",symbol2,")",symbol1,"}").replace("D",str(D))
if typekey == "numpy":
expression = "{}{}{}".format("np.array(list(",temp_expression,"))")
elif typekey == "python":
expression = temp_expression
expr = eval(expression)
return expr
python set结构
numpy 结构