求算法---组数相关

kissoday 2020-04-28 06:10:10
先不说问题,说下奖励制度
哪位大神的回复只要被采用,加微信发100元现金红包
我会再最后结贴时贴图出来。

问题:
一个字符串数组(长度不一定)
如:['s1', 's2', 's3']

输入一个分组数(分组数是动态的,但一定小于上面数组长度):
例如:2

想要结果:
S1-S2, S3
S1-S3, S2
S2-S3, S1

穷举出所有可能出现的组合,当然不能有重复的。
还有一点要注意,S1-S2和S2-S1这样算是重复的

身为一个老鸟,发这样的帖子有点耻辱,但是实在没办法了
最近乱七八糟的事简直太多了,写了几个分组方式都觉着不对
项目马上纳期,着急使用,所以请各位大神伸手搭救一下。

如果各位大神觉着写完了没问题,我又没能及时看到,可以加我微信:kissoday
只要采用,一定完成上面承诺。
...全文
104 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
kissoday 2020-04-29
  • 打赏
  • 举报
回复
非常感谢大家的帮助,虽然最终结果都不太符合我这边的需求,不过我在你们的代码中也找到了很多提示和灵感,现在问题已经解决了,再次感谢四楼,五楼的两个兄弟,希望你们看到帖子之后加一下我的微信,让我表示一下感谢。 丑话说在前面,毕竟是没有彻底解决问题,所以100红包就你俩平分吧。 为了避免骗子,你俩给我发一下私信,告诉我你们的微信名。 等红包发完我会过来结贴并且给分。 赶紧联系我吧!!!
chuifengde 2020-04-29
  • 打赏
  • 举报
回复
from itertools import permutations
from more_itertools import chunked

num = int(input(">"))

p = ['s1', 's2', 's3', 's4', 's5', 's6']
l = []
for i in list(permutations(p, len(p))):
    tmp_x = chunked(i, num)
    tmp_y = [sorted(j) for j in tmp_x]
    tmp_y = sorted(tmp_y, key=lambda t: (-len(t), t[0]))
    if tmp_y not in l:
        l.append(tmp_y)

result = []
for t in l:
    result.append([r[0] if len(r) == 1 else '->'.join(r) for r in t])

for i in result:
    print(i)
print(len(l))
陈年椰子 2020-04-28
  • 打赏
  • 举报
回复
不知道是不是这个意思。


from itertools import combinations

def get_comb(set_temp, comb_num):
    comb_items = list(combinations(set_temp, comb_num))
    if len(set_temp) - comb_num <= comb_num:
        return [['-'.join(comb_item), '-'.join(list(set_temp - set(comb_item))) ]    for comb_item in comb_items]
    else:
        comb_items_temp = []
        for comb_item in comb_items:
            comb_items_next = get_comb(set_temp - set(comb_item), comb_num)
            for comb_item_next in comb_items_next:
                temp = ['-'.join(comb_item)]
                temp.extend(comb_item_next)
                comb_items_temp.append(temp)
        return comb_items_temp


test_set = {'s1', 's2', 's3', 's4', 's5'}

test_comb = get_comb(test_set, 2)
print(len(test_comb), test_comb)

weixin_45903952 2020-04-28
  • 打赏
  • 举报
回复

import itertools

lista = ['s1', 's2', 's3', 's4', 's5', 's6', 's7', 's8', 's9']
#lista=['s1','s2','s3']
print(len(lista))
partnum=int(input('分组数'))
rang1=[i for i in range(1,len(lista)+2-partnum)]
# 建一个顺序的数组print(rang1) 
mylist = list(itertools.permutations(rang1, partnum))
#print(mylist)
mylist=list(filter(lambda x :sum(x)==len(lista),mylist))

newlist=[]
for mylist1 in mylist:
    mylist1=list(mylist1)
    mylist1.sort()
    if mylist1 not in newlist:
        newlist.append(mylist1)
print(newlist)



def get_chuan(fenzu1,start,temp,lista,num):
    if start==num:
        return temp
    #print(start,temp,num)
    fenzu2=fenzu1[start]
    temp1=[]
    for i in itertools.combinations(lista, fenzu2):
        temp1.append('-'.join(i))
        lista1=lista.copy()
        for i1 in i:
            lista1.remove(i1)
        start1=start+1
        #temp.append(temp1)
        temp2=get_chuan(fenzu1,start1,temp1,lista1,num)
    temp.append(temp2)
    return temp

chuan=[]
for fenzu1 in newlist:  #fenzu1=[1,2,6]
    temp=[]
    num=len(fenzu1)
    temp=get_chuan(fenzu1,start=0,temp=temp,lista=lista,num=num)
    print(temp)
kissoday 2020-04-28
  • 打赏
  • 举报
回复
引用 1 楼 chuifengde 的回复:
from itertools import combinations

num = int(input(">"))

p = ['s1','s2','s3','s4']
x= list(combinations(p,num)) 
ps = set(p)
gg = [['->'.join(i)]  +list(ps - set(i)) for i in x]
print(gg)
不好意思兄弟,可能是我描述的不太清楚 比如给你那个数组P分组,分组数为2的场合 我想要这样的结果 S1-S2,S3-S4 S1-S3,S2-S4 S1-S4,S2-S3 如果数组长度模除分组数不为0的场合,最后剩下的余数为最后一组 如果数组长度为5:['s1','s2','s3','s4','s5'] 分组数为2的场合 应该分成 s1-s2,s3-s4,s5 .... 分组数为3的场合 应该分成: s1-s2-s3, s4-s5 s1-s2-s4, s3-s5 ....
chuifengde 2020-04-28
  • 打赏
  • 举报
回复
from itertools import combinations

num = int(input(">"))

p = ['s1','s2','s3','s4']
x= list(combinations(p,num)) 
ps = set(p)
gg = [['->'.join(i)]  +list(ps - set(i)) for i in x]
print(gg)

37,719

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧