【itertools】無限イテレータcount、cycle、repeat[Python]

  • URLをコピーしました!
目次

itertools

前回、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を使ってある関数の一部を固定した新しい関数を作る方法を紹介します。

ではでは今回はこんな感じで。

よかったらシェアしてね!
  • URLをコピーしました!

コメント

コメントする

目次