Python itertools 操作迭代物件

2022-08-18 22:06:14 字數 2261 閱讀 9545

python 的內建模組itertools提供了很多操作迭代物件的方法

返回乙個可無限迭代的迭代器,可以用於產生自然數

>>> import itertools

>>> natuals = itertools.count(1)#1可以省略不屑,預設從0開始

>>> for n in natuals:

... print(n)

...123

...會無限迴圈下去,除非ctrl+c終止

會把傳入的序列無限重複下去

>>> import itertools

>>> cs = itertools.cycle('abc') # 注意字串也是序列的一種

>>> for c in cs:

... print(c)

...'a'

'b''c'

'a''b'

'c'...

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

無限序列只有在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]

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

>>> for c in itertools.chain('abc', 'xyz'):

... print(c)

# 迭代效果:'a' 'b' 'c' 'x' 'y' 'z'

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

>>> for key,group in itertools.groupby('aaaaabbbccww'):

... print(key,list(group))#注意這裡的list()

...a ['a', 'a', 'a', 'a', 'a']

b ['b', 'b', 'b']

c ['c', 'c']

w ['w', 'w']

實際上挑選規則是通過函式完成的,只要作用於函式的兩個元素返回的值相等,這兩個元素就被認為是在一組的,而函式返回值作為組的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']

補充:計算pi的值:

def pi(n):

def creat_odd(n):

natuals=itertools.count(0)

s=itertools.takewhile(lambda x:xreturn [2*i+1 for i in s]

alternately=itertools.cycle([4,-4])

def divide2four(x):

return next(alternately)/x

def figure_out(n):

result_list=list(map(divide2four,creat_odd(n)))

# print(result_list)

add_result=0

for i in result_list:

add_result+=i

# print(add_result)

return add_result

return figure_out(n)

python迭代 如何對迭代器做切片操作

問題舉例 讀取某個檔案內容的100 300行內容,我們是否可以使用 類似列表切片的方式得到乙個100 300行檔案內容的生成器 列表的切片操作其實是在過載方法 getitem 方法 可以通過file.readlines 後再做切片,記憶體會載入整個檔案到記憶體,如果檔案太大,會浪費記憶體空間 使用i...

python迭代 如何對迭代器做切片操作

問題舉例 讀取某個檔案內容的100 300行內容,我們是否可以使用 類似列表切片的方式得到乙個100 300行檔案內容的生成器 列表的切片操作其實是在過載方法 getitem 方法 可以通過file.readlines 後再做切片,記憶體會載入整個檔案到記憶體,如果檔案太大,會浪費記憶體空間 使用i...

python可迭代 python中可迭代物件有哪些

python中的可迭代物件有哪些?python中的可迭代物件有 列表 元組 字典 字串 常結合for迴圈使用 判斷乙個物件是不是可迭代物件 from collections import iterable isinstance list range 100 iterable isinstance s...