Pythonチュートリアル

Pythonホーム Pythonイントロ Pythonはじめに Python構文 Pythonコメント Python変数 Pythonデータ型 Python番号 Pythonキャスティング Python文字列 Pythonブール値 Python演算子 Pythonリスト Pythonタプル Pythonセット Python辞書 Python If ... Else PythonのWhileループ PythonForループ Python関数 Python Lambda Python配列 Pythonクラス/オブジェクト Pythonの継承 Pythonイテレータ Pythonスコープ Pythonモジュール Pythonの日付 Python数学 Python JSON Python RegEx Python PIP Python試してみてください... Pythonユーザー入力 Python文字列フォーマット

ファイル処理

Pythonファイル処理 Python読み取りファイル Python書き込み/ファイルの作成 Pythonファイルの削除

Pythonモジュール

NumPyチュートリアル パンダ攻略 Scipyチュートリアル

Python Matplotlib

Matplotlibイントロ Matplotlibはじめに Matplotlib Pyplot Matplotlibプロット Matplotlibマーカー Matplotlibライン Matplotlibラベル Matplotlibグリッド Matplotlibサブプロット Matplotlib散布図 Matplotlibバー Matplotlibヒストグラム Matplotlib円グラフ

機械学習

入門 平均中央値モード 標準偏差 パーセンタイル データ配信 正規データ分布 散布図 線形回帰 多項式回帰 重回帰 規模 トレーニング/テスト デシジョンツリー

Python MySQL

MySQLはじめに MySQLデータベースの作成 MySQLテーブルの作成 MySQL挿入 MySQL Select MySQL Where MySQL Order By MySQL削除 MySQLドロップテーブル MySQLアップデート MySQLの制限 MySQL参加

Python MongoDB

MongoDBはじめに MongoDBデータベースの作成 MongoDBCreateコレクション MongoDBインサート MongoDB検索 MongoDBクエリ MongoDBソート MongoDB削除 MongoDBドロップコレクション MongoDBアップデート MongoDBの制限

Pythonリファレンス

Pythonの概要 Python組み込み関数 Python文字列メソッド Pythonリストメソッド Python辞書メソッド Pythonタプルメソッド Pythonセットメソッド Pythonファイルメソッド Pythonキーワード Pythonの例外 Python用語集

モジュールリファレンス

ランダムモジュール リクエストモジュール 統計モジュール 数学モジュール cMathモジュール

Pythonハウツー

リストの重複を削除する 文字列を逆にする 2つの数字を追加する

Pythonの例

Pythonの例 Pythonコンパイラ Python演習 Pythonクイズ Python証明書

Pythonイテレータ


Pythonイテレータ

イテレータは、カウント可能な数の値を含むオブジェクトです。

イテレータは反復可能なオブジェクトです。つまり、すべての値をトラバースできます。

技術的には、Pythonでは、イテレータはイテレータプロトコルを実装するオブジェクトであり、メソッド__iter__() と。で構成されます__next__()


イテレータとイテレータ

リスト、タプル、辞書、およびセットはすべて反復可能なオブジェクトです。これらは 、イテレータを取得できる反復可能なコンテナです。

これらすべてのオブジェクトにはiter()、イテレータを取得するために使用されるメソッドがあります。

タプルからイテレータを返し、各値を出力します。

mytuple = ("apple", "banana", "cherry")
myit = iter(mytuple)

print(next(myit))
print(next(myit))
print(next(myit))

文字列でさえ反復可能なオブジェクトであり、イテレータを返すことができます。

文字列も反復可能なオブジェクトであり、一連の文字が含まれています。

mystr = "banana"
myit = iter(mystr)

print(next(myit))
print(next(myit))
print(next(myit))
print(next(myit))
print(next(myit))
print(next(myit))

イテレータをループする

ループを使用しforて、反復可能なオブジェクトを反復処理することもできます。

タプルの値を繰り返します。

mytuple = ("apple", "banana", "cherry")

for x in mytuple:
  print(x)

文字列の文字を繰り返します。

mystr = "banana"

for x in mystr:
  print(x)

ループは実際にイテレータオブジェクトを作成し、forループごとにnext()メソッドを実行します。



イテレータを作成する

イテレータとしてオブジェクト/クラスを作成するには、メソッド __iter__() __next__()オブジェクトを実装する必要があります。

Pythonのクラス/オブジェクトの章で学習したように、すべてのクラスには __init__()、オブジェクトの作成時に初期化を行うことができる、という関数があります。

__iter__()メソッドは同様に動作し、操作(初期化など)を実行できますが、常にイテレータオブジェクト自体を返す必要があります

この__next__()メソッドでは、操作を実行することもでき、シーケンス内の次のアイテムを返す必要があります。

1から始まる数値を返すイテレータを作成すると、各シーケンスが1つ増えます(1、2、3、4、5などを返します)。

class MyNumbers:
  def __iter__(self):
    self.a = 1
    return self

  def __next__(self):
    x = self.a
    self.a += 1
    return x

myclass = MyNumbers()
myiter = iter(myclass)

print(next(myiter))
print(next(myiter))
print(next(myiter))
print(next(myiter))
print(next(myiter))

StopIteration

for上記の例は、十分なnext()ステートメントがある場合、またはループで使用された場合、永久に続き ます。

反復が永遠に続くのを防ぐために、 StopIterationステートメントを使用できます。

この__next__()メソッドでは、終了条件を追加して、反復が指定された回数行われた場合にエラーを発生させることができます。

20回の反復後に停止します。

class MyNumbers:
  def __iter__(self):
    self.a = 1
    return self

  def __next__(self):
    if self.a <= 20:
      x = self.a
      self.a += 1
      return x
    else:
      raise StopIteration

myclass = MyNumbers()
myiter = iter(myclass)

for x in myiter:
  print(x)