gpt4 book ai didi

python - 成对组合组,其中每个成员仅出现一次

转载 作者:太空宇宙 更新时间:2023-11-03 20:49:52 26 4
gpt4 key购买 nike

我有一个唯一元组列表,每个元组包含从 1 到 10 的 2 个元素。列表中的元素总数为 45。我想将它们分为 10 组,每组仅包含从 1 到 10 的数字。

我尝试使用以下答案解决我的问题: python get groups of combinations that each member appear only once

python :

from itertools import combinations, chain
l = ['A','B','C','D','E', 'F', 'G','H','I','J']
c = list(combinations(l,2))
[set(i) for i in list(combinations(c,5)) if (len(set(l) & set(chain(*i))) == len(l))]

但是我得到了重复,就像这样:

[{('A', 'B'), ('C', 'D'), ('E', 'F'), ('G', 'H'), ('I', 'J')},
{('A', 'B'), ('C', 'D'), ('E', 'F'), ('G', 'I'), ('H', 'J')},...]

最佳答案

不是10对,但有945对满足你的条件

我所做的是,获取所有数字的排列,创建一个字典将所有组合保留为键。

现在,对于每个排列元素,我将它们分成 2 个 即 [1,2,3,4] 是 [(1,2),(2,3),(3,4)]

这将创建一个列表

现在,对于所有此类列表及其元素,我已经从字典中比较了它们,无论它们是否存在于字典中。

ps。这是一个漫长且耗时的解决方案,利用图论我们可以大大减小尺寸。

from itertools import combinations, permutations
l=['A','B','C','D','E','F','G','H','I','J']
c=list(permutations(l))
d=list(combinations(l,2))
from collections import defaultdict

dic = defaultdict(int)

for i in d:
dic[i]=1


new =[]
for i in c:
tmp=[]
for j in range(1,len(i),2):
tmp.append((i[j-1],i[j]))
new.append(tmp)


final =[]

for i in new:
flag =True
count =0
for j in i:
try:
if dic[j]:
count+=1
pass

except:
flag=False
count=0
break
if flag and count==5:
final.append(i)

final2 = [tuple(sorted(i)) for i in final]

solution = list(set(final2))
print(solution)

将以这种方式存在 945 个这样的值对

关于python - 成对组合组,其中每个成员仅出现一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56340805/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com