官术网_书友最值得收藏!

4.1.5 迭代器切片

在Python中,很多對象都提供了標準的切片操作,如字符串、序列,但要得到一個由迭代器生成的切片對象,使用標準切片操作并不可行。對于迭代器,itertools模塊中的islice()函數可以解決該切片操作問題。

函數itertools.islice()適用于在迭代器和生成器上做切片操作,代碼(split_iter.py)示例如下:


def count(n):
    while True:
        yield n
        n += 1

c = count(0)
print(c[5: 8])

import itertools
for x in itertools.islice(c, 5, 8):
    print(f'iter val is: {x}')

執行py文件,輸出結果如下:


Traceback (most recent call last):
  File "/advanced_programming/chapter4/split_iter.py", line 7, in <module>
    print(c[5: 8])
TypeError: 'generator' object is not subscriptable
iter val is: 5
iter val is: 6
iter val is: 7

迭代器和生成器不能使用標準的切片操作,因為我們事先并不知道它們的長度(并且也沒有實現索引)。函數islice()返回一個可以生成指定元素的迭代器,它通過遍歷并丟棄切片索引開始位置的所有元素,然后返回元素,直到遍歷至切片索引結束位置。

注意 islice()函數會消耗掉傳入的迭代器中的數據,在使用時必須考慮到迭代器是不可逆的。如果需要之后再次訪問迭代器,應先將迭代器中的數據放入一個列表中。

主站蜘蛛池模板: 新兴县| 辰溪县| 眉山市| 彭阳县| 长海县| 桐城市| 永福县| 雷州市| 大荔县| 同仁县| 呼和浩特市| 桑植县| 周宁县| 兖州市| 高邑县| 普兰店市| 云霄县| 婺源县| 兰西县| 丰宁| 高雄县| 柯坪县| 彭山县| 讷河市| 高台县| 安乡县| 河津市| 汤阴县| 兴城市| 博湖县| 柳江县| 北辰区| 西安市| 大安市| 新龙县| 大宁县| 永嘉县| 大邑县| 宿州市| 垫江县| 黄大仙区|