python中的itertools模組簡單使用

嗨,阿良發表於2021-11-03

itertools

高效迴圈下建立迴圈器的標準庫

Infinite itertools,無限迭代器

itertools.count(start=0, step=10)

預設返回一個從0開始,依次+10的自然數迭代器,如果你不停止,它會一直執行下去。
可以用start指定開始的位置,step是步長。

import itertools

c = itertools.count(start=0, step=1)
for i in c:
    print(i)

    
# 0
# 10
# 20
# 30
# 40
# 50
# ...

itertools.cycle(iterable)

傳入一個可迭代物件,然後無限迴圈迭代。

import itertools

# itertools.count()
l = [1,2,3,4,5]
c = itertools.cycle(l)

for i in c:
    print(i)


# 1
# 2
# 3
# 4
# 5
# 1
# 2
# 3
# 4
# 5
# ...

itertools.repeat(p_object, times=None)

重複迭代一個物件p_object,如果不指定times,則會迭代無數次,也可以通過times引數指定迭代的次數。

import itertools

# itertools.count()
l = [1,2,3,4,5]
c = itertools.repeat(l, 5)

for i in c:
    print(i)


# [1, 2, 3, 4, 5]
# [1, 2, 3, 4, 5]
# [1, 2, 3, 4, 5]
# [1, 2, 3, 4, 5]
# [1, 2, 3, 4, 5]

Iterators terminating on the shortest input sequence

itertools.accumulate(iterable, func)

返回序列的累計值或者其他二進位制函式。

import itertools

# itertools.count()
l = [1,2,3,4,5]
c = itertools.accumulate(l)

print(c)

for i in c:
    print(i)


# 1
# 3
# 6
# 10
# 15

accumulate()仍然返回的是一個迭代器,傳一個list,在for迴圈中遍歷列印的時候發現,它做了累加操作。(迭代第一個數,就是前一個數的和,迭代到第二個數時,就是前兩個數的和,以此類推)

並且做遞加操作時支援:list, tuple, str, set, dict

傳入的是dict物件,那麼會累加迭代dict的key:

import itertools

# itertools.count()
d = {'a': 1, 'b': 2, 'c': 3}
c = itertools.accumulate(d)

print(c)

for i in c:
    print(i)


# <itertools.accumulate object at 0x000001F7A0A90E48>
# a
# ab
# abc

itertools.chain(*iterables)

chain()方法中的引數可以傳入多個序列,而且只要是序列即可,不限定序列的資料型別。

如:迭代list, tuple, str三個序列

import itertools

l = [1, 2, 3, 4, 5]
t = (1, 2, 3, 4, 5)
s = 'abcdefg'
c = itertools.chain(l, t, s)

print(c)

for i in c:
    print(i)


# <itertools.chain object at 0x0000026E64801448>
# 1
# 2
# 3
# 4
# 5
# 1
# 2
# 3
# 4
# 5
# a
# b
# c
# d
# e
# f
# g

itertools 笛卡爾積

import itertools

d = [
    [{"a": 1}, {"b": 2}], [{"c": 3}, {"d": 4}, {"e": 5}], [{"f": 6}, {"g": 7}]
]

print(*d)

for i in itertools.product(*d):
    print(i)

# [{'a': 1}, {'b': 2}] [{'c': 3}, {'d': 4}, {'e': 5}] [{'f': 6}, {'g': 7}]
# ({'a': 1}, {'c': 3}, {'f': 6})
# ({'a': 1}, {'c': 3}, {'g': 7})
# ({'a': 1}, {'d': 4}, {'f': 6})
# ({'a': 1}, {'d': 4}, {'g': 7})
# ({'a': 1}, {'e': 5}, {'f': 6})
# ({'a': 1}, {'e': 5}, {'g': 7})
# ({'b': 2}, {'c': 3}, {'f': 6})
# ({'b': 2}, {'c': 3}, {'g': 7})
# ({'b': 2}, {'d': 4}, {'f': 6})
# ({'b': 2}, {'d': 4}, {'g': 7})
# ({'b': 2}, {'e': 5}, {'f': 6})
# ({'b': 2}, {'e': 5}, {'g': 7})

相關文章