具有许多重复的列表的高效迭代唯一置换生成器

时间:2018-03-21 13:01:47

标签: python list permutation

我有一个递归代码来计算唯一的排列。但是,这给了我一个分段错误(由于超出堆栈限制)。如何将其转换为迭代代码。我已经按照有关将递归代码转换为迭代的在线教程,但我的迭代代码不起作用。

class unique_element:
    def __init__(self,value,occurrences):
        self.value = value
        self.occurrences = occurrences

def 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 list(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):
                    print g
                    yield g
                i.occurrences += 1

0 个答案:

没有答案