我有一些集合,我想对其进行笛卡尔积,效果很好。但是,我想删除这个新集合中在元素排列下相同的所有元素。
例如,采用以下代码:
import itertools as ittools
x = 2
y = 3
z = 5
flist = list(ittools.product([x,y,z],repeat=3))
for f in flist:
print reduce(lambda a,b: a*b, f)
此代码查找集合 {2,3,5} 的笛卡尔积,并返回结果集中每个元素的所有三个分量的乘积。然而,有些数字会出现多次,即 12 可以写成 2*2*3、2*3*2 或 3*2*2。我想删除这些重复项中除一个实例之外的所有实例。
我知道这从根本上来说是一个组合问题,但这似乎在 Python 中可能有一个很好的解决方案,它不需要像我在这里所做的那样对列表进行额外的传递来计算笛卡尔积的每个元素的一些标识符。
你要combinations_with_replacement, not product
:
itertools.combinations_with_replacement([x, y, z], 3)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)