下面的例子给出了相同的结果:手册产品与参数数目未知的
A.
product = []
for a in "abcd":
for b in "xy":
product.append((a,b))
B.
from itertools import product
list(product("abcd","xy"))
我如何计算笛卡尔乘积类似例子A当我不知道参数n的数量?
原因我问这:
考虑这一段代码:
allocations = list(product(*strategies.values()))
for alloc in allocations:
PWC[alloc] = [a for (a,b) in zip(help,alloc) if coalitions[a] >= sum(b)]
的所述strategies
字典的值的元组的列表,help
是一个辅助变量(与列表每alloc
和coalitions
是相同的长度是另一个字典,分配给元组帮助某些数值。
由于策略值是排序的,我知道if语句在某个alloc
之后不再是真的。由于分配是一个相当大名单,我会避免款项吨比较,并吨,如果我可以使用例如算法A.
究竟是什么反对使用'itertools.product'这个? – poke
因为在这种情况下,b的值(让我们只考虑每个alloc的最后一个元素)将是如下的元组:(0.0.1),(0.0.2),(0.0.3)等(很长时间来解释为什么)。相反,联盟[a]是一个常数。如果联盟[a] = 3,我知道在b =(0.0.3)之后,a的所有下一个值都不能包含在PWC [alloc]中。 – Pigna
我真的不明白。是否要取消在某个点上从笛卡尔产品中迭代更多元素?在那种情况下,如何使用A中的列表理解帮助你完成这项工作? – poke