给定数据集我想构建所有组合(仍然使用$scope.getArray
)。
要减少组合数itertools.combinations
,我想省略其他组合中包含的对。
举例说明一个小例子。所有n!/r!/(n-r)!
看起来都是
combinations(range(9), 3)
这使得(0,1,2), (0,1,3), (0,1,4),... (0,1,8),... (0,7,8), (1,2,3),...
对成为7元组的一部分。也适用于所有其他元组。
(0,1)
的完全通缉输出:
range(9), 3
在给定一系列(0, 1, 2)
(0, 3, 4)
(0, 5, 6)
(0, 7, 8)
(1, 3, 6)
(1, 4, 7)
(1, 5, 8)
(2, 3, 8)
(2, 4, 5)
(2, 6, 7)
(3, 5, 7)
(4, 6, 8)
元素的情况下,使用r
元素构建长度为n
的元组,并且应提供(n-1)*n/2
元组。
答案 0 :(得分:0)
长度为3的元组
from numpy import roll
from pprint import pprint
def a(s):
if len(s)<3:return
s=list(s)
z=s.pop(0)
s1,s2=s[0::2],s[1::2]
l=[]
for a,b in zip(s1,s2):l+=[(z,a,b)]
z1,z2=s1.pop(0),s2.pop(0)
if(len(s1)>1 and len(s2)>1):
for a,b in sorted(map(sorted,zip(s1,roll(s2,-1)))):l+=[(z1,a,b)]
if(len(s1)>2 and len(s2)>2):
for a,b in sorted(map(sorted,zip(s1,roll(s2,1)))):l+=[(z2,a,b)]
if(len(s1)>3):l+=[a(s1)]
if(len(s2)>3):l+=[a(s2)]
return l
s = range(9)
pprint(a(s))
使用递归我们可以构建各种长度