我知道如何生成一个集合的组合,并且这是Python中的内建(我使用的),无论如何。但如何生成替代组合?替换组合
假设我有一套有两个相同的元素 - 例如,AABCDE。的3项
组合可能是:
"AAB"
"ABC"
"CDE"
然而,该计划将数ABC两次 - 使用第一个A时,一次,并使用第二A.第二个
什么生成这样的组合而不重复的好方法是什么?
谢谢。
我知道如何生成一个集合的组合,并且这是Python中的内建(我使用的),无论如何。但如何生成替代组合?替换组合
假设我有一套有两个相同的元素 - 例如,AABCDE。的3项
组合可能是:
"AAB"
"ABC"
"CDE"
然而,该计划将数ABC两次 - 使用第一个A时,一次,并使用第二A.第二个
什么生成这样的组合而不重复的好方法是什么?
谢谢。
将其转换为set
,这是摆脱重复的最简单的方法。
不,我认为“AAC”是一个有效的组合 – ooboo 2009-10-19 21:02:28
所以,这与我的答案相矛盾。建立你的重复列表,然后套用。 – SilentGhost 2009-10-19 21:05:21
我以为你的意思是将原始列表转换为像其他人建议的设置。这仍然很棘手。如果我想要组合使用同一个项目的许多副本来替换列表,那么效率非常低,并且您不能将其用作迭代器 – ooboo 2009-10-19 21:08:16
>>> 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'])
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
气味功课。 – Malfist 2009-10-19 20:52:43
我仍然对你想要什么感到困惑。你能给出“AABCDE”情况下的完整输出吗? – 2009-10-19 21:16:12
是的。 AABCDE的完整输出将与itertools.combinations(AABCDE)上的调用集完全相同。 如果您有2把粉红色椅子,1把绿色椅子和1把蓝色椅子,您可以将多种方式组合使用?考虑到粉红色的椅子适用于所有目的,并且可以使用同一组合中的两把粉红色椅子。 – ooboo 2009-10-22 13:34:36