【问题标题】:cross product in python of arbitrarily many lists任意多个列表的python中的叉积
【发布时间】:2013-07-12 21:10:12
【问题描述】:
我知道您可以通过此处发布的方式获取列表的成对叉积:Pairwise crossproduct in Python
但我想获取一个列表 L 和一个正整数 n 并返回 L 与其自身 n 次的叉积。是否有内置的方法可以做到这一点,或者我只需要迭代成对的交叉产品?
(对于那些只使用全能高中数学老师传授给他们的神圣术语的人来说,是“笛卡尔积”......)
【问题讨论】:
标签:
python
list
cartesian-product
cross-product
【解决方案1】:
您正在寻找itertools.product:
输入迭代的笛卡尔积。
相当于生成器表达式中的嵌套 for 循环。例如,
product(A, B) 返回的结果与 ((x,y) for x in A for y in B) 相同。
嵌套循环像里程表一样循环,最右边的元素
在每次迭代中推进。这种模式创建了一个字典
排序,以便如果输入的可迭代项已排序,则产品
元组按排序顺序发出。
要计算可迭代对象与自身的乘积,请指定数字
带有可选的重复关键字参数的重复次数。例如,
product(A, repeat=4) 和 product(A, A, A, A) 意思一样。
所以你只需要这样做
itertools.product(L, repeat=n)