セクション 6. 章 2
single
Pythonにおけるイテレータの理解
メニューを表示するにはスワイプしてください
イテレータとは何か
技術的には、Pythonにおけるイテレータは、イテレータプロトコルを実装するオブジェクトであり、次のメソッドで構成されます。
__iter__(): イテレータオブジェクト自身を返し、forのようなループで利用可能にする;__next__(): シーケンス内の次の要素を返す。要素が残っていない場合、走査の終了を示すためにStopIteration例外を発生させる。
イテレータは、イテラブル(例:リストや文字列)の要素を1つずつ走査し、その位置を保持することを可能にします。
iterator = iter(iterable)
注意
イテレータは
__iter__()メソッドを実装しているため、イテラブルでもあります。すべてのイテラブルがイテレータであるとは限りません。例えば、リストはイテラブルですがイテレータではありません。
iter()関数に渡すと、要素ごとに走査できるイテレータが得られます。
カスタムイテレータの作成
このイテレータは、固定回数のランダムなサイコロの出目を生成し、すべての出目が完了すると停止します。
123456789101112131415161718192021222324252627import random class FiniteDie: def __init__(self, num_rolls): """Initialize the iterator with a fixed number of rolls.""" self.num_rolls = num_rolls self.current_roll = 0 def __iter__(self): """Return the iterator object itself.""" return self def __next__(self): """Generate the next dice roll or stop iteration.""" if self.current_roll < self.num_rolls: self.current_roll += 1 return random.randint(1, 6) raise StopIteration # Using the FiniteDie iterator num_rolls = 5 die_iterator = FiniteDie(num_rolls) print(f"Rolling the die {num_rolls} times:") for roll in die_iterator: print(f"Rolled: {roll}")
イテレータの消費
一度イテレータが消費されると、再作成しない限り再利用できません。例えば:
12345678910numbers = [1, 2, 3, 4] iterator = iter(numbers) # First iteration for num in iterator: print(num) # Output: 1, 2, 3, 4 # Second iteration for num in iterator: print(num) # Output: Nothing, the iterator is exhausted.
イテレータは一度だけ走査可能。再度イテレートするには、新しいイテレータの作成が必要。
タスク
スワイプしてコーディングを開始
コードの不足部分を完成させて、無限ダイスロールをシミュレートするカスタムのイテレータクラスを実装してください。このイテレータは、6面ダイスのランダムな出目を遅延的に生成し、10回のロール後に停止します。
__iter__()メソッドは、オブジェクトをイテレータとして使用できるようにします。__next__()メソッドは、次のランダムなダイスの出目(1から6の数値)を生成します。- ダイスロールを表す
InfiniteDieクラスのインスタンスを作成します。 enumerate()を使ったforループでダイスを遅延的にロールします。if条件とbreak文を使って10回のロール後に停止してください。
解答
すべて明確でしたか?
フィードバックありがとうございます!
セクション 6. 章 2
single
AIに質問する
AIに質問する
何でも質問するか、提案された質問の1つを試してチャットを始めてください