Python如何對生成器對象進行切片操作

斐波那契數列大家都已經很熟悉了

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

符合預期目標

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容