python迭代器以及itertools模組
迭代器
# 在python中,迭代器協定是實作物件的__iter()方法和next()方法,其中前者回傳物件本身,後者返回容器的下一個元素。實作了這兩個方法的物件就是可迭代物件。迭代器是有惰性的,只有在使用時才會產生,這就為處理大量資料提供了好處,不同一次性把所有資料寫入記憶體。下面自己寫了一個迭代器,可以看到使用for迴圈可以處理自己寫的迭代器,實作了迭代器協定的對象,可以使用任何類似for迴圈這樣的迭代器工具。但是,看下面的輸出,第二次輸出為空,這是為什麼呢?當我們使用list時,我們可以多次輸出同一個對象,這和實作了自己實作了迭代器協定的對像有什麼不同?
class it(object):def __init__(self, n):
self.a = 0
self
def next(self):
if self.a < self.n:
self.a += 1 # turn else:
raise StopIteration
i=it(5)
for j in i:
print j,
print ''
print '------'
for j in i:
print j
# 1 2 3 4 5
# ------
經過學習,得知,list等型別迭代器返回的是一個迭代器對象,不是返回了本身。那就寫瞭如下程式碼進行測試,經過列印輸出可以看到,類別TestIt的物件是可以重複使用的。那麼又有一個問題了,沒有實作next()方法的對象,還是迭代器對象嗎?這是因為在使用it類時,是返回了迭代器物件的,把迭代的功能使用了it迭代器實現,也就是說相當於實現了迭代器協定。迭代器協定在python中很有用,python中有一個關於迭代器的模組itertools,下面我就學習一下itertools模組,看看有哪些驚喜!
<br/>
無限迭代器
1 count(),接受兩個參數,第一個是開始的數字,第二個是步幅,預設從0開始,用法如下
class TestIt(object): def __init__(self, a): self.a = a def __iter__(self): return it(self.a)
2 cycle(),接受一個參數,該參數是迭代器物件(列表,字串等),會循環產生迭代器中的元素
import itertools as it c = it.count(10, 2) for i in c: if i > 20: break print i, # 10 12 14 16 18 20
3 repeat(),接受兩個參數,用於產生第一個參數n次
c = it.cycle([1, 2, 3]) i = 1 for j in c: if i > 7: break print j, i += 1
有限迭代器,選取感覺自己常用的介紹下
#1 chain(),接受多個迭代器物件作為參數,並把它們連接起來chain('abc', [1, 2, 3])
2 compress(data, selectors), 根據後面的參數過濾前面的參數,兩個參數都需要是迭代器物件
3 dropwhile
(pre, iterable),pre參數為函數,當pre(i)是Ture是,傳回該項目以及後面所有項目
4 groupby(iterable[, keyfunc]),其中#iterable 是可迭代對象,keyfunc 是分組函數,用於對iterable 的連續項目被分組,如果不指定,則預設將iterable 中的連續相同項目分組,傳回一個 (key, sub-iterator) 的迭代器。 5 ifilter(function or None, sequence),将 iterable 中 function(item) 为 True 的元素组成一个迭代器返回,如果 function 是 None,则返回 iterable 中所有计算为 True 的项 6 tee(iterable [,n]), <br/> <br/> 组合生成器 1 permutations(iterable[, r]),用于生成一个排列,r是生成排列的元素长度,不指定则为默认长度 <br/> <br/> 2 combinations(iterable, r), 求序列的组合,其中,r 指定生成组合的元素的长度,是必需的参数 3 combinations_with_replacement(iterable, r),生成的组合包含自身元素 更多python迭代器以及itertools模块相关文章请关注PHP中文网!#
tee
用于从 iterable 创建 n 个独立的迭代器,以元组的形式返回,n 的默认值是 2。 for j in it.tee('abc', 4):
print list(j)
list(it.permutations( list(it.permutations(, 2
print list(it.combinations_with_replacement('abc', 2))
# [('a', 'a'), ('a', 'b'), ('a', 'c'), ('b', 'b'), ('b', 'c'), ('c', 'c')]

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

Linux終端中查看Python版本時遇到權限問題的解決方法當你在Linux終端中嘗試查看Python的版本時,輸入python...

在使用Python的pandas庫時,如何在兩個結構不同的DataFrame之間進行整列複製是一個常見的問題。假設我們有兩個Dat...

如何在10小時內教計算機小白編程基礎?如果你只有10個小時來教計算機小白一些編程知識,你會選擇教些什麼�...

Uvicorn是如何持續監聽HTTP請求的? Uvicorn是一個基於ASGI的輕量級Web服務器,其核心功能之一便是監聽HTTP請求並進�...

在Python中,如何通過字符串動態創建對象並調用其方法?這是一個常見的編程需求,尤其在需要根據配置或運行...

本文討論了諸如Numpy,Pandas,Matplotlib,Scikit-Learn,Tensorflow,Tensorflow,Django,Blask和請求等流行的Python庫,並詳細介紹了它們在科學計算,數據分析,可視化,機器學習,網絡開發和H中的用途

使用FiddlerEverywhere進行中間人讀取時如何避免被檢測到當你使用FiddlerEverywhere...
