我知道如何生成一個集合的組合,並且這是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