- Python進階編程:編寫更高效、優雅的Python代碼
- 劉宇宙 謝東 劉艷
- 370字
- 2021-04-30 12:39:48
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()函數會消耗掉傳入的迭代器中的數據,在使用時必須考慮到迭代器是不可逆的。如果需要之后再次訪問迭代器,應先將迭代器中的數據放入一個列表中。