[1,4,7][2,5,8,9][3,6]
至
[1,2,3,6,7,9]
我实现了一个算法:
class zigzagIterator: def __init__(self,vecs): self.vecs = [] self.turns = 0 for vec in vecs: vec and self.vecs.append(iter(vec)) def next(self): try: elem = self.vecs[self.turns].next() self.turns = (self.turns+1) % len(self.vecs) return elem except stopiteration: self.vecs.pop(self.turns) if self.hasNext(): self.turns %= len(self.vecs) def hasNext(self): return len(self.vecs) > 0if __name__ == "__main__": s = zigzagIterator([[1,7],[2,9],[3,6]]) while s.hasNext(): print s.next()>>> 1 2 3 4 5 6 7 8 None None 9 None
我知道问题是因为我再次调用每个列表的next(),然后我得到3无.我可以通过使用java检查hasnext方法来解决此问题.我也可以在python中实现一个hasnext Iterator.我的问题是如何以更加pythonic的方式解决这个问题,而不是用Java思考它.
解决方法 这是itertools
docs中的循环配方. def roundrobin(*iterables): "roundrobin('ABC','D','EF') --> A D E B F C" # Recipe credited to George Sakkis num_active = len(iterables) nexts = cycle(iter(it).__next__ for it in iterables) while num_active: try: for next in nexts: yIEld next() except stopiteration: # Remove the iterator we just exhausted from the cycle. num_active -= 1 nexts = cycle(islice(nexts,num_active))总结
以上是内存溢出为你收集整理的Zigzag Iterator的Pythonic方式?全部内容,希望文章能够帮你解决Zigzag Iterator的Pythonic方式?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)