Pythonのループはfor・while文を使ってループします。
forループの対象と取出し方が今イチわからないアナタへ。
『何を対象にループするの?』
『どうやってデータを取り出すの?』
『イテラブルオブジェクトって何?』
『イテレータって何?』
『whileでもforと同じようにデータを取り出せるの?』
こんな疑問に答えます。
【Pythonのfor文】配列をイテレータとinで取り出し!
Pythonのfor文をザックリ説明すると…
イテラブルオブジェクトである配列の要素をinで取り出しながらループさせる命令です。
for文で配列の要素を全て取り出すことができます。
基本の書式はこちら
for 変数名 in 配列(※イテラブルオブジェクト)
処理
(※)イテレータを持つオブジェクト
この構文が全ての基本です。
配列やイテラブル・イテレータについては、次の章で説明します。
例文をみてみましょう。
【例】配列(リスト)の要素を取り出すfor文
ary = [3, 5, 8]
for x in ary:
print(x)
3 5 8
リストのイテラブルオブジェクトの要素が順番に変数xに代入されてますね。
リスト要素[3,5,8]が順番に取りだされて、それぞれprint表示されてます。
いてらぶるオブジェクトも急にでてきたぞ…
【Python】配列とイテレータとイテラブルの違い
ゴッチャになりやすい配列とイテレータとイテラブルの違いについてまとめました。
配列とは
実は配列の定義は曖昧で、配列オブジェクトというものはありません。
一般的に配列というと、リストやタプルのオブジェクトとなります。
配列を複数の値を入れるオブジェクトの総称とすると、
配列には様々なオブジェクトがあります。
list, tuple, str, range, bytearray, bytes
dict, set, frozenset, flie object
イテラブル(Iterable)とは
イテラブルとは複数の要素を繰り返して取り出すことが可能なことです。
イテラブルなオブジェクトをイテラブルオブジェクトと呼びます。
イテラブル(Iterable)を和訳すると「反復可能」という意味です。
イテラブルオブジェクトも色々あります。
list, tuple, str, range, bytearray, bytes
dict, set, frozenset, flie object
先ほども言ったように、配列の定義は曖昧です。
一般的に配列と言われるオブジェクト(リストやタプルなど)はイテレータを持っています。
イテレータを持つオブジェクトがイテラブルオブジェクトです。
イテレータ(iterator)とは
イテレータ(iterator)とは要素を反復して取り出すことのできるインタフェースです。
インタフェースとはイテレータが持つメソッド__iter__()と__next__()が相当します。
イテレータは「反復子」とも呼ばれ、for文の繰り返し処理もイテレータを介してを実現します。
チンプンカンプン
イテレータの機能とメソッドを説明しますね。
- 求められるたびに要素をひとつずつ返す
- データがなくなるとデータの代わりに StopIteration 例外を返す
(例外がデータの終了する条件となる)
- 自身を戻り値とする__iter__()メソッド
for文などでイテレータ化が要求された時に呼ばれる - 次の要素を返す__next__()メソッド
呼ばれる度に新しい値を返す
返す値がない時はStopIteration例外をraiseする
【python】イテレータのメソッドを実装したクラスを作る
イテレータのメソッドをを実装したクラスを作ってみましょう。
class MyIter(object):
def __init__(self, *numbers):
self._numbers = numbers
self._i = 0
def __iter__(self):
return self
def __next__(self):
if self._i == len(self._numbers):
raise StopIteration()
value = self._numbers[self._i]
self._i += 1
return value
for文で実行してみましょう。
my_iter = MyIter(1000, 2000, 3000)
for num in my_iter:
print('%d' % num)
1000 2000 3000
自作のクラスでイテレータを実装しても、for文の書式にしたがってループされていますね。
内部ではメソッド__iter__()で初期化してから、__next__()で要素を順番に取り出しています。
また、
配列といわれるオブジェクトでは、ほとんどイテレータが実装されています。
配列はイテラブルオブジェクトと言って過言ではないでしょう。
その方が都合がいいからじゃ
配列は要素を取り出せた方が便利ですよね。
だからイテレータが実装されているのです。
配列と呼ばれるオブジェクトには次の種類がありますが、全てイテレータが実装されています。
- シーケンス(list, tuple, str, range, bytearray, bytes)
- 辞書(dict)
- 集合(set, frozenset)
- ファイル(flie object)
listやtupleはイテレータメソッドを持つイテラブルオブジェクトの代表です。
ファイルも1つずつデータを取り出せるのでイテラブルです。
連番を作成できるrangeもイテラブルです。
Pythonのfor文ではインデックスの加算する構文はありません。
range関数を使用してインデックスの加算を行って連番を作成します。
初めに述べたこの構文が全ての基本になります。頑張ってマスターしましょう♪
要素を反復して取り出すことのできるインタフェース
【python】while文もイテレータで要素を取り出し
listからイテレータのiter・nextメソッドを使用して要素を取り出すことができます。
while文を用いてリスト内の全要素を取り出してみましょう。
while文の書式はこちら
while 条件式:
処理
- 条件式を満たす(True)の間は処理を実行し続ける
- breakで処理を終了する
whileでイテレータを使用した例文。
l = [1000, 2000, 3000]
it = iter(l)
while True:
try:
print(next(it))
except StopIteration:
break
1000 2000 3000
リスト内の全要素が取り出されていますね。
for文を使用した例文と全く同じ結果です。
【Python】まとめ!for・while文とイテレータ
いかがでしたでしょうか。
Pythonのfor文でイテレータで要素の取り出す方法
- 配列・イテレータ・イテラブルの違い
- while文でfor文と同様の結果を持つj日j日
- for文はinとイテレータで取り出し!whileも♪
について紹介いたしました。
振り返ってみましょう!
基本の書式はこちら
for 変数名 in 配列(※イテラブルオブジェクト)
処理
(※)イテレータを持つオブジェクト
この構文が全ての基本です。
要素を反復して取り出すことのできるインタフェース
- 自身を戻り値とする__iter__()メソッド
for文などでイテレータ化が要求された時に呼ばれる - 次の要素を返す__next__()メソッド
呼ばれる度に新しい値を返す
返す値がない時はStopIteration例外をraiseする
【ご参考】
for文でインクリメントするケーススタディはコチラ
for文でイテレータのindexを取得するケーススタディはコチラ
何事も基本が重要。ループの基本を学びたい方はコチラ
「記事を読んでもわからないトコがある」「内容が変だよ」
という時は、お気軽にコメントください♪
「もっとSEおっさんに詳しく聞きたい。何かお願いしたい!」
という時は、ココナラまで。メッセージもお気軽に♪
LINEでのお問合わせも受付中!
LINE公式アカウント
メッセージをお待ちしています!
- 応用情報技術者
- Oracle Master Gold
- Java SE Gold
- Java EE Webコンポーネントディベロッパ
- Python エンジニア認定データ分析
- 簿記2級