美文网首页
Python如何对生成器对象进行切片操作

Python如何对生成器对象进行切片操作

作者: 我有一只碗 | 来源:发表于2017-08-09 23:30 被阅读0次

斐波那契数列大家都已经很熟悉了

class Fib():
    def __init__(self):
        self.a, self.b = 1, 1

    def __iter__(self):
        while True:
            yield self.a
            self.a, self.b = self.b, self.a + self.b

在这里定义了一个斐波那契数列的类,可以对它进行迭代

n = 0
for x in Fib():
    n += 1
    print(x)
    if n == 30:
        break

通过这样的方式可以很容易输入前任意个值,但是如果要输出第20到30个序列的值该怎么办
如果直接对这个对象或者对这个对象的迭代器进行切片操作会分别得到这两个错误

TypeError: 'Fib' object is not subscriptable
TypeError: 'generator' object is not subscriptable

这时候最容易想到的办法就是重新写这个类让它支持切片操作,但是这样过于麻烦
这时候itertools模块下的islice方法显得十分方便

for x in islice(Fib(), 10, 20):
    print(x)
89
144
233
377
610
987
1597
2584
4181
6765

符合预期目标

相关文章

网友评论

      本文标题:Python如何对生成器对象进行切片操作

      本文链接:https://www.haomeiwen.com/subject/azhcrxtx.html