accumulate()
itertools.accumulate(iterable)
この関数は、関数の結果を返すイテレータを作成します。 関数は変数と同じように渡すことができます。 accumulate()
関数は、引数として関数を受け取ります。 また、イテレート可能な変数も受け取ります。 この関数は、蓄積された結果を返します。 結果はそれ自体がイテレート可能なものに含まれます。 これは非常にわかりにくいと思うかもしれません。
コード
data = result = itertools.accumulate(data, operator.mul)
for each in result:
print(each)
出力
1
2
6
24
120
operator.mulは2つの数値を受け取り、それらを乗算します。
operator.mul(1, 2)
2
operator.mul(2, 3)
6
operator.mul(6, 4)
24
operator.mul(24, 5)
120
次の例では、max
の関数を使用します。
コード
data = result = itertools.accumulate(data, max)
for each in result:
print(each)
出力
5
5
6
6
6
9
9
max
関数は、最大のアイテムを返します。
5
max(5, 2)
5
max(5, 6)
6
max(6, 4)
6
max(6, 5)
6
max(6, 9)
9
max(9, 1)
9
関数の指定は任意です。
コード
data = result = itertools.accumulate(data)
for each in result:
print(each)
出力
5
7
13
17
22
31
32
関数が指定されていない場合、項目は合計されます。
5
5 + 2 = 7
7 + 6 = 13
13 + 4 = 17
17 + 5 = 22
22 + 9 = 31
31 + 1 = 32
combinations()
itertools.combinations(iterable, r)
この関数はiterableと整数を受け取ります。
コード
shapes = result = itertools.combinations(shapes, 2)for each in result:
print(each)
このコードでは、メンバーが2人のコンボをすべて作ります。
Output
('circle', 'triangle')
('circle', 'square')
('triangle', 'square')
Code
shapes = result = itertools.combinations(shapes, 3)for each in result:
print(each)
このコードでは、3人のメンバーですべてのコンボを作ります。
Output
('circle', 'triangle', 'square')
combinations_with_replacement()
itertools.combinations_with_replacement(iterable, r)
こちらはcombinations()
関数と同じですが、こちらは個々の要素を2回以上繰り返すことができます。
コード
shapes = result = itertools.combinations_with_replacement(shapes, 2)
for each in result:
print(each)
出力
('circle', 'circle')
('circle', 'triangle')
('circle', 'square')
('triangle', 'triangle')
('triangle', 'square')
('square', 'square')
count()
itertools.count(start=0, step=1)
数字のstartから始まる等間隔の値を返すイテレータを作成します。
コード
for i in itertools.count(10,3):
print(i)
if i > 20:
break
上記のコードでは、関数を反復したりループしたりしています。
出力
10
13
16
19
22
この最初の繰り返しでは、値が10になります。 次のステップでは、3を加算します。 次の繰り返しでも同じことをして、値は16になります。
cycle()
itertools.cycle(iterable)
この関数はイテレータを無限に循環させます。
コード
colors = for color in itertools.cycle(colors):
print(color)
上記のコードでは、リストを作成します。 そして、このリストを延々と循環させています。 通常、for
cycle()
という関数を使えば違います。
出力
red
orange
yellow
green
blue
indigo
violet
red
orange
yellow
green
...
上記の果てしない出力を楕円で切り捨てました。
chain()
itertools.chain(*iterables)
この関数は一連のイテレートを受け取り、それらを1つの長いイテレートとして返します。
コード
colors =
shapes = result = itertools.chain(colors, shapes)
for each in result:
print(each)
出力
red
orange
yellow
green
blue
circle
triangle
square
pentagon
compress()
itertools.compress(data, selectors)
この関数は、1つのイテレートを別のイテレートでフィルタリングします。
コード
shapes =
selections = result = itertools.compress(shapes, selections)
for each in result:
print(each)
出力
circle
square
dropwhile()
itertools.dropwhile(predicate, iterable)
述語が真である限り、iterableから要素を削除するイテレータを作成します。 その後、すべての要素を返します。
コード
data = result = itertools.dropwhile(lambda x: x<5, data)
for each in result:
print(each)
出力
5
6
7
8
9
10
1
わかりました。 これは紛らわしいですね。 コードでは、アイテムが5未満の間、各アイテムをドロップするようになっています。 5未満ではないアイテムに遭遇した後、残りのアイテムを返します。
Step Through It
1 < 5: True, drop
2 < 5: True, drop
3 < 5: True, drop
4 < 5: True, drop
5 < 5: False, return surviving items
filterfalse()
itertools.filterfalse(predicate, iterable)
この関数は、iterableから要素をフィルタリングして、述語がFalse
であるものだけを返すイテレータを作ります。
Code
data =
result = itertools.filterfalse(lambda x: x<5, data)
for each in result:
print(each)
Output
5
6
7
8
9
10
Step Through It
1 < 5: True, drop
2 < 5: True, drop
3 < 5: True, drop
4 < 5: True, drop
5 < 5: False, keep
6 < 5: False, keep
7 < 5: False, keep
8 < 5: False, keep
9 < 5: False, keep
10 < 5: False, keep
groupby()
itertools.groupby(iterable, key=None)
簡単に言うと。 この関数は、物事をグループ化します。 OKです。 これは複雑ですね。 そして、例は少し長いです。
コード
robots = for key, group in itertools.groupby(bots, key=lambda x: x):
print(key)
print(list(group))
出力
autobot
decepticon
islice()
itertools.islice(iterable, start, stop)
この関数はスライスと非常によく似ています。 この関数を使うと、反復可能なものの一部を切り取ることができます。
コード
colors =
few_colors = itertools.islice(colors, 2)
for each in few_colors:
print(each)
アウトプット
red
orange
permutations()
itertools.permutations(iterable, r=None)
コード
alpha_data = result = itertools.permutations(alpha_data)
for each in result:
print(each)
Output
('a', 'b', 'c')
('a', 'c', 'b')
('b', 'a', 'c')
('b', 'c', 'a')
('c', 'a', 'b')
('c', 'b', 'a')
product()
この関数は一連のイテレートからカルテシアンプロダクトを作成します。
コード
num_data =
alpha_data = result = itertools.product(num_data, alpha_data)
for each in result:
print(each)
出力
(1, 'a')
(1, 'b')
(1, 'c')
(2, 'a')
(2, 'b')
(2, 'c')
(3, 'a')
(3, 'b')
(3, 'c')
次のような表を想像してください。
a b c
1 a1 b1 c1
2 a2 b2 c3
3 a3 b3 b3
repeat()
itertools.repeat(object)
この関数は、あるオブジェクトを何度も繰り返します。
コード
for i in itertools.repeat("spam"):
print(i)
上記のコードでは、spam
を何度も繰り返すだけのイテレートを作成しています。 これを無限に行います。
Output
spam
spam
spam
spam
spam
spam
...
上記の無限の出力を楕円で切り捨てました。
コード
for i in itertools.repeat("spam", 3):
print(i)
引数にtimes
を使えば、繰り返す回数を制限することができます。
出力
spam
spam
spam
この例では、spam
は3回しか繰り返しません。
starmap()
itertools.starmap(function, iterable)
この関数は、イテレートから得られた引数を使って関数を計算するイテレータを作ります。 では、早速見てみましょう。
コード
data =
result = itertools.starmap(operator.mul, data)
for each in result:
print(each)
アウトプット
12
32
21
ステップスルー
operator.mul(2, 6)
12
operator.mul(8, 4)
32
operator.mul(7, 3)
21
takewhile()
itertools.takwwhile(predicate, iterable)
これは、dropwhile()
の逆のようなものです。 この関数は、イテレータを作成し、述語が真である限り、イテレート可能な要素を返します。
コード
data = result = itertools.takewhile(lambda x: x<5, data)
for each in result:
print(each)
出力
1
2
3
4
Step Through It
1 < 5: True, keep going
2 < 5: True, keep going
3 < 5: True, keep going
4 < 5: True, keep going
5 < 5: False, stop and drop
tee()
itertools.tee(iterable, n=2)
1つのイテレートからn個の独立したイテレータを返します。
コード
colors =
alpha_colors, beta_colors = itertools.tee(colors)for each in alpha_colors:
print(each)print('..')for each in beta_colors:
print(each)
デフォルトは2ですが、必要な数だけ作ることができます。
出力
red
orange
yellow
green
blue
..
red
orange
yellow
green
blue
zip_longest()
itertools.zip_longest(*iterables, fillvalue=None)
この関数は、それぞれのイテレータから要素を集約したイテレータを作成します。 各イテレータの長さが不揃いの場合、足りない値はfillvalueで埋められます。
Code
colors =
data = for each in itertools.zip_longest(colors, data, fillvalue=None):
print(each)
Output
('red', 1)
('orange', 2)
('yellow', 3)
('green', 4)
('blue', 5)
(None, 6)
(None, 7)
(None, 8)
(None, 9)
(None, 10)