Build a Basic Python Iterator

前端 未结 10 1054
南旧
南旧 2020-11-21 12:22

How would one create an iterative function (or iterator object) in python?

10条回答
  •  渐次进展
    2020-11-21 12:36

    Inspired by Matt Gregory's answer here is a bit more complicated iterator that will return a,b,...,z,aa,ab,...,zz,aaa,aab,...,zzy,zzz

        class AlphaCounter:
        def __init__(self, low, high):
            self.current = low
            self.high = high
    
        def __iter__(self):
            return self
    
        def __next__(self): # Python 3: def __next__(self)
            alpha = ' abcdefghijklmnopqrstuvwxyz'
            n_current = sum([(alpha.find(self.current[x])* 26**(len(self.current)-x-1)) for x in range(len(self.current))])
            n_high = sum([(alpha.find(self.high[x])* 26**(len(self.high)-x-1)) for x in range(len(self.high))])
            if n_current > n_high:
                raise StopIteration
            else:
                increment = True
                ret = ''
                for x in self.current[::-1]:
                    if 'z' == x:
                        if increment:
                            ret += 'a'
                        else:
                            ret += 'z'
                    else:
                        if increment:
                            ret += alpha[alpha.find(x)+1]
                            increment = False
                        else:
                            ret += x
                if increment:
                    ret += 'a'
                tmp = self.current
                self.current = ret[::-1]
                return tmp
    
    for c in AlphaCounter('a', 'zzz'):
        print(c)
    

提交回复
热议问题