itertools の使い方


*itertools とは

Pythonでリストや辞書を扱う際に、組み合わせや順序を操作することができる便利なモジュールです。


*参考



*chain

複数の配列を結合します。
import itertools

animals = ['dog', 'cat', 'panda', 'pig']
index = [0, 1, 2, 3]

it = itertools.chain(index, animals)
for i in it:
    print(i)


<実行結果>
0
1
2
3
dog
cat
panda
pig


*zip_longest

複数の配列を、要素同士を組み合わせて結合します。
import itertools

animals = ['dog', 'cat', 'panda', 'pig']
index = [0, 1, 2, 3]

it = itertools.zip_longest(index, animals)
for i in it:
    print(i)


<実行結果>
(0, 'dog')
(1, 'cat')
(2, 'panda')
(3, 'pig')


*islice

要素を抽出します。引数で、開始インデックス、終了インデックス、何個おきかのステップを指定することができます。
import itertools

it = itertools.islice(itertools.count(), 0, 12, 3)
for i in it:
    print(i)


<実行結果>
0
3
6
9


*combinations

指定した数の組み合わせを作成します。
import itertools

animals = ['dog', 'cat', 'panda', 'pig']

for i in itertools.combinations(animals, 2):
    print(i)


<実行結果>
('dog', 'cat')
('dog', 'panda')
('dog', 'pig')
('cat', 'panda')
('cat', 'pig')
('panda', 'pig')


*permutations

指定した数の並び順のパターンを作成します。
import itertools

for i in itertools.permutations(range(3), 2):
    print(i)

<実行結果>
(0, 1)
(0, 2)
(1, 0)
(1, 2)
(2, 0)
(2, 1)


*product

デカルト積を作成します。productを使うことで、forループの入れ子をしないですみます。
import itertools

animals = ['dog', 'cat', 'panda', 'pig']
food = ['bone', 'fish', 'bamboo', 'grass']
drink = ['water', 'milk']

for i in itertools.product(animals, food, drink):
    print(i)


<実行結果>
('dog', 'bone', 'water')
('dog', 'bone', 'milk')
('dog', 'fish', 'water')
('dog', 'fish', 'milk')
('dog', 'bamboo', 'water')
('dog', 'bamboo', 'milk')
('dog', 'grass', 'water')
('dog', 'grass', 'milk')
('cat', 'bone', 'water')
('cat', 'bone', 'milk')
('cat', 'fish', 'water')
('cat', 'fish', 'milk')
('cat', 'bamboo', 'water')
('cat', 'bamboo', 'milk')
('cat', 'grass', 'water')
('cat', 'grass', 'milk')
('panda', 'bone', 'water')
('panda', 'bone', 'milk')
('panda', 'fish', 'water')
('panda', 'fish', 'milk')
('panda', 'bamboo', 'water')
('panda', 'bamboo', 'milk')
('panda', 'grass', 'water')
('panda', 'grass', 'milk')
('pig', 'bone', 'water')
('pig', 'bone', 'milk')
('pig', 'fish', 'water')
('pig', 'fish', 'milk')
('pig', 'bamboo', 'water')
('pig', 'bamboo', 'milk')
('pig', 'grass', 'water')
('pig', 'grass', 'milk')


*dropwhile

条件を指定して要素を抽出します。
import itertools

numbers = tuple(range(10))

for i in itertools.dropwhile(lambda x:x<5, range(10)):
    print(i)


<実行結果>
5
6
7
8
9


*所感

itertoolsを使うことで、面倒な処理を簡単に行うことができました。この他にもまだ機能はあるので、公式ドキュメントをよく読んで、必要な場面で使えるようにしておこうと思います。
また、イテレータを自作することも可能なようですので、面倒な処理は共通化して見やすいコードを書けるようにしていきたいです。

Previous
Next Post »

人気の投稿