3 回答

TA貢獻(xiàn)1757條經(jīng)驗(yàn) 獲得超8個(gè)贊
class unique_element: def __init__(self,value,occurrences): self.value = value self.occurrences = occurrencesdef perm_unique(elements): eset=set(elements) listunique = [unique_element(i,elements.count(i)) for i in eset] u=len(elements) return perm_unique_helper(listunique,[0]*u,u-1)def perm_unique_helper(listunique,result_list,d): if d < 0: yield tuple(result_list) else: for i in listunique: if i.occurrences > 0: result_list[d]=i.value i.occurrences-=1 for g in perm_unique_helper(listunique,result_list,d-1): yield g i.occurrences+=1a = list(perm_unique([1,1,2]))print(a)
[(2, 1, 1), (1, 2, 1), (1, 1, 2)]
def permutations_with_replacement(elements,n): return permutations_helper(elements,[0]*n,n-1)#this is generatordef permutations_helper(elements,result_list,d): if d<0: yield tuple(result_list) else: for i in elements: result_list[d]=i all_permutations = permutations_helper(elements,result_list,d-1)#this is generator for g in all_permutations: yield g
yield
for g in perm_unique_helper(listunique,result_list,d-1): yield g
permutations_with_replacement

TA貢獻(xiàn)1825條經(jīng)驗(yàn) 獲得超6個(gè)贊
from itertools import permutationsdef unique_permutations(iterable, r=None): previous = tuple() for p in permutations(sorted(iterable), r): if p > previous: previous = p yield pfor p in unique_permutations('cabcab', 2): print p
('a', 'a')('a', 'b')('a', 'c')('b', 'a')('b', 'b')('b', 'c')('c', 'a')('c', 'b')('c', 'c')
添加回答
舉報(bào)