组合迭代

大家好

我写了一些代码来解决Eu​​ler Project#90,并遇到了遍历特定列表的所有组合的需求。 任何改进都将受到欢迎,但我认为带有迭代器的类将是适当的。

这是带有一些代码的课程。

class myComb(object): 
    """my interable combinatorial object""" 
    def __init__(self,elements,length): 
        if len(elements)>length: 
            self.length=length 
            self.elements=elements 
            self.noEls=len(elements)   
    def comb(self): 
        """return the combination for the current index""" 
        c=[] 
        for i in self.index: 
            c.append(self.elements[i]) 
        return c   
    def __iter__(self): 
        self.index=range(self.length) 
        self.index[self.length-1]+=-1 
        return self   
    def next(self): 
        if self.index==range(self.noEls-self.length,self.noEls): 
            raise StopIteration 
        i=self.length-1 
        while self.index[i]==self.noEls-self.length+i: 
            i+=-1 
        self.index[i]+=1 
        for j in range(i+1,self.length): 
            self.index[j]=self.index[j-1]+1 
        return self.comb()     
C=myComb(["a","b","c","d","e"],3) 
for i in C: 
    print i 
该代码将打印出来:

['a','b','c']

['a','b','d']

['a','b','e']

['a','c','d']

['高手']

['a','d','e']

['b','c','d']

['b','c','e']

['b','d','e']

['c','d','e']

这对于Euler Project类型的事情很有帮助!

From: https://bytes.com/topic/python/insights/878787-combination-iteration

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值