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)itertools提供的幾個迭代器操作函式更加有用:ns=itertools.takewhile(lambda x:x<=10,natuals)
list(ns)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
chain()
chain()可以把一組迭代物件串聯起來,行成乙個更大的迭代器:
groupby()
groupby()把迭代器中相鄰的重複元素跳出來放在一起:
for key,group in itertools.groupby(『aaabbbccaaaddd』):實際上挑選規則時通過函式完成的,只要作用於函式的兩個元素返回的值相等,這兩個元素就被認為是在一組的,而函式返回值作為組的key。如果我們要忽略大小寫分組,就可以讓』a』和『a』都返回相同的key:… print(key,list(group))
…a [『a』, 『a』, 『a』]
b [『b』, 『b』, 『b』]
c [『c』, 『c』]
a [『a』, 『a』, 『a』]
d [『d』, 『d』, 『d』]
for key,group in itertools.groupby(『aaabbbccaaa』,lambda c:c.upper()):itertools模組提供的全部是處理迭代功能的函式,他們的返回值不是list,而是iterator,只有用for迴圈迭代的時候,才真正計算。… print(key,list(group))
…a [『a』, 『a』, 『a』]
b [『b』, 『b』, 『b』]
c [『c』, 『c』]
a [『a』, 『a』, 『a』]
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...