*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
を使うことで、面倒な処理を簡単に行うことができました。この他にもまだ機能はあるので、公式ドキュメントをよく読んで、必要な場面で使えるようにしておこうと思います。また、イテレータを自作することも可能なようですので、面倒な処理は共通化して見やすいコードを書けるようにしていきたいです。
Sign up here with your email
ConversionConversion EmoticonEmoticon