大家好
我写了一些代码来解决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','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