带重复的组合

0 投票
3 回答
2795 浏览
提问于 2025-04-15 15:11

我知道怎么生成一个集合的组合,这在Python中是内置的功能(我用的就是这个)。不过,怎么生成带重复的组合呢?

假设我有一个集合,比如说,有两个相同的元素——例如,AABCDE

从中选出3个元素的组合可能是:

"AAB"
"ABC"
"CDE"

但是,程序会把ABC算两次——一次是用第一个A,另一次是用第二个A。

有没有什么好的方法可以生成这样的组合,而且不重复呢?

谢谢。

3 个回答

0

这段代码是用来处理某些数据的。它的主要作用是从一个地方获取信息,然后对这些信息进行一些操作,最后把结果返回给你。具体来说,它可能会从数据库中提取数据,或者从用户输入中获取信息。

在这段代码中,可能会有一些循环和条件判断,这些都是为了确保程序能够根据不同的情况做出正确的反应。例如,如果输入的数据符合某个条件,程序就会执行特定的操作;如果不符合,程序可能会选择其他的处理方式。

总的来说,这段代码的目的是让程序能够智能地处理输入的数据,并给出相应的结果。通过这样的方式,程序可以更好地满足用户的需求。

def stepper_w_w(l,stop):#stepper_with_while
"""l is a list of any size usually you would input [1,1,1,1...],
stop is the highest number you want to stop at so if you put in stop=5
the sequence would stop at [5,5,5,5...]
This stepper shows the first number that equals the last.
This generates combinations with replacement. """
    numb1=1
    while numb1<stop:
        #print(numb1)
        l[0]=numb1
        NeL=0 
        while l[len(l)-1]<=numb1: 
            if l[NeL]==l[len(l)-1]:
                l[NeL]+=1
                l[(NeL+1):]=[1]*((len(l))-(NeL+1))
                print(l)
                """iter_2s=NeL+1
                while iter_2s<=(len(l)-1): #this is different from above
                    l[iter_2s]=2
                    iter_2s+=1
                    print(l)"""
                NeL=-1
            NeL+=1
        numb1+=1
2
>>> import itertools
>>> ["".join(x) for x in (itertools.combinations(set("AABCDE"),3))]
['ACB', 'ACE', 'ACD', 'ABE', 'ABD', 'AED', 'CBE', 'CBD', 'CED', 'BED']
>>> 

根据你之前的评论,我觉得我误解了你的问题。

>>> import itertools
>>> set("".join(x) for x in (itertools.combinations("AABCDE",3)))
set(['AAE', 'AAD', 'ABC', 'ABD', 'ABE', 'AAC', 'AAB', 'BCD', 'BCE', 'ACD', 'CDE', 'ACE', 'ADE', 'BDE'])
2

把它转换成set,这是去掉重复项最简单的方法。

撰写回答