Python3學習筆記23 itertools

2021-09-18 01:31:51 字數 1657 閱讀 4922

python的內建模組itertools提供了非常有用的用於操作迭代物件的函式。

首先,我們看看itertools提供的幾個」無限「迭代器:

因為count()會建立乙個無限的迭代器,所以上述**會列印出自然數序列,根本停不下來,只能按ctrl+c退出。

cycle()會把傳入的乙個序列無限重複下去:

同樣停不下來。

repeat()負責把乙個元素無限重複下去,不過如果提供第二個引數就可以限定重複次數:

>>> ns=itertools.repeat('a',3)

>>> for n in ns:

... print(n)

...a

aa

無限序列只有在for迭代時才會無限地迭代下去,如果只是建立了乙個迭代物件,它不會事先把無限個元素生成出來,事實上也不可能在記憶體中建立多個元素。

無限序列雖然可以無限迭代下去,但是通常我們會通過takewhile()等函式根據條件判斷來截取出乙個有限的序列:

natuals=itertools.count(1)

ns=itertools.takewhile(lambda x:x<=10,natuals)

list(ns)

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

itertools提供的幾個迭代器操作函式更加有用:

chain()

chain()可以把一組迭代物件串聯起來,行成乙個更大的迭代器:

groupby()

groupby()把迭代器中相鄰的重複元素跳出來放在一起:

for key,group in itertools.groupby(『aaabbbccaaaddd』):

… print(key,list(group))

…a [『a』, 『a』, 『a』]

b [『b』, 『b』, 『b』]

c [『c』, 『c』]

a [『a』, 『a』, 『a』]

d [『d』, 『d』, 『d』]

實際上挑選規則時通過函式完成的,只要作用於函式的兩個元素返回的值相等,這兩個元素就被認為是在一組的,而函式返回值作為組的key。如果我們要忽略大小寫分組,就可以讓』a』和『a』都返回相同的key:

for key,group in itertools.groupby(『aaabbbccaaa』,lambda c:c.upper()):

… print(key,list(group))

…a [『a』, 『a』, 『a』]

b [『b』, 『b』, 『b』]

c [『c』, 『c』]

a [『a』, 『a』, 『a』]

itertools模組提供的全部是處理迭代功能的函式,他們的返回值不是list,而是iterator,只有用for迴圈迭代的時候,才真正計算。

python3學習 習題23

這一節有點難,只能說勉強完成了四個目標,教材裡稍微擴充套件一點點的內容都沒有嘗試 也是因為現在太晚了。明天還要搬磚 下次再看的時候要對筆記進行補充。目標 教材提供的原始檔有點問題 好像說是因為我的終端沒法顯示utf 8,但我在他提供的網頁上直接瀏覽也是這樣的亂碼,不懂。很多字元變成了亂碼,所以 的執...

Python3學習筆記

最近在起步學python,聚合一下這個過程中蒐集的資源和對一些基本知識做個小總結,語法基於python3,方便以後查詢。python官方文件 不錯的基礎課程 基本語法 演算法 建模 練習 以下是整理常用可能遺忘的基礎點 python3中的輸入是input 獲得使用者輸入的字串 a input ple...

python3學習筆記

redis訊息佇列的使用 coding utf 8 created on tue mar 26 15 58 34 2019 author admin import redis class redisqueue object def init self,name,namespace queue red...