目次
itertools
前回、functoolsのreduce関数を使ってリスト内の全要素の計算値を取得する方法を紹介しました。
【functools】reduce関数を使ってリスト内の全要素の計算値を取得する方法[Python]
functools 前回、自作関数を使ってリストや辞書から条件を満たす要素を抽出するfilter関数を紹介しました。 今回はfunctoolsのreduce関数を使ってリスト内の全要素の計…
今回はitertoolsの無限イテレータcount、cycle、repeatを紹介します。
どれも普通に使ってしまうとものすごい速さでカウントしていくので、今回はtimeモジュールのsleep関数を使っていつでも止められるように速度を落として試していきます。
それでははじめていきましょう。
count
countは無限に数字をカウントアップ、もしくはカウントダウンしていく関数です。
「count()」とすれば0からカウントアップしていきます。
from itertools import count
import time
for i in count():
print(i)
time.sleep(0.1)
実行結果
0
1
2
3
4
5
(以下略)
「count(値)」とするとその値からカウントアップしていきます。
from itertools import count
import time
for i in count(10):
print(i)
time.sleep(0.1)
実行結果
10
11
12
13
14
15
(中略)
また「count(値1, 値2)」とすると値1から開始し、値2ずつカウントアップしていきます。
from itertools import count
import time
for i in count(10, 100):
print(i)
time.sleep(0.1)
実行結果
10
110
210
310
410
510
(中略)
カウントダウンするには2つ目の引数の値をマイナスにします。
from itertools import count
import time
for i in count(10, -1):
print(i)
time.sleep(0.1)
実行結果
10
9
8
7
6
5
(以下略)
cycle
cycleはその引数に文字列を取り、文字列の文字を一つずつ取得し、最後まで取得すると最初に戻ります。
from itertools import cycle
import time
for i in cycle("ABC"):
print(i)
time.sleep(0.1)
実行結果
A
B
C
A
B
C
A
B
C
(以下略)
引数に数値を取ることはできず、エラーとなります。
from itertools import cycle
import time
for i in cycle(12345):
print(i)
time.sleep(0.1)
実行結果
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
Cell In[3], line 4
1 from itertools import cycle
2 import time
----> 4 for i in cycle(12345):
5 print(i)
6 time.sleep(0.1)
TypeError: 'int' object is not iterable
repeat
repeatは「repeat(繰り返す値, 繰り返す回数)」とすることで、繰り返す値を指定した回数だけ繰り返します。
from itertools import repeat
import time
for i in repeat(10, 5):
print(i)
time.sleep(0.1)
実行結果
10
10
10
10
10
最初の引数に文字列を指定するとその文字列が指定した回数だけ繰り返されます。
from itertools import repeat
import time
for i in repeat("ABC", 5):
print(i)
time.sleep(0.1)
実行結果
ABC
ABC
ABC
ABC
ABC
次回はfunctoolsのpartialを使ってある関数の一部を固定した新しい関数を作る方法を紹介します。
ではでは今回はこんな感じで。
コメント