以下示例给出了相同的结果:
答
product = []
for a in "abcd":
for b in "xy":
product.append((a,b))
B
from itertools import product
list(product("abcd","xy"))
当我不知道参数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,我将避免大量的比较和求和
你可以做:
列表
items
可以包含任意数量的字符串,使用product
的计算将为您提供这些字符串的笛卡尔积请注意,您不必将其转换为一个列表-您可以对其进行迭代,并在不再希望继续时停止:
如果您只想在达到某个条件后中止分配,并且希望避免从笛卡尔积中为这些条件生成所有元素,那么首先就不要列出所有组合
itertools.product
是lazy,这意味着它一次只生成笛卡尔积的一个值。所以你不需要生成所有的元素,也不需要比较元素。只是不要对结果调用list()
,因为这样会迭代整个序列并将所有可能的组合存储在内存中:重要的是要注意
itertools.product
是如何生成值的,它遵循什么模式。基本上相当于:因此,从iterables的左侧可以得到一个递增的模式。因此,请确保您对iterables的排序方式能够正确指定中断条件
相关问题 更多 >
编程相关推荐