组合迭代
大家好,大家好
我正在编写一些代码来解决Euler 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','c','e']
['a','d','e']
['B','c','d']
['B','c','e']
['B','d','e']
['C','d','e']
这对Euler Project类型的事情很有帮助!
评论已关闭