Python iter() 関数
iter()Python で反復可能オブジェクトをイテレータに変換するための組み込み関数です。
イテレータは Python において非常に重要な概念であり、iter()任意の反復可能オブジェクトからイテレータを作成でき、関数を使用でき、next()要素を1つずつアクセスします。
単語の説明: iter 是 iterator(迭代器)的缩写。
基本構文とパラメータ
構文形式
iter(object) iter(object, sentinel)
パラメータの説明
- パラメータ object:
- 型: 反復可能オブジェクト
- 説明: イテレータに変換するオブジェクト。
- パラメータ sentinel(省略可能)
- 型: 任意の値
- 説明: センチネル値。この値に達すると反復を停止します。
関数の説明
- 戻り値: イテレータオブジェクトを返します。
- 特徴: イテレータは前方にのみ進むことができ、後退できません。
例
例1:基本的な使い方
例
# リストからイテレータを作成
my_list = [1, 2, 3]
iterator = iter(my_list)
# next() を使用して要素を取得
print(next(iterator)) # 出力: 1
print(next(iterator)) # 出力: 2
print(next(iterator)) # 出力: 3
# さらに呼び出すと StopIteration が発生します
# print(next(iterator))
# for ループで反復することもできます
my_list = [1, 2, 3]
for item in iter(my_list):
print(item, end=" ")
# 出力: 1 2 3
my_list = [1, 2, 3]
iterator = iter(my_list)
# next() を使用して要素を取得
print(next(iterator)) # 出力: 1
print(next(iterator)) # 出力: 2
print(next(iterator)) # 出力: 3
# さらに呼び出すと StopIteration が発生します
# print(next(iterator))
# for ループで反復することもできます
my_list = [1, 2, 3]
for item in iter(my_list):
print(item, end=" ")
# 出力: 1 2 3
実行結果の予想:
1 2 3 1 2 3
コードの解説:
iter()反復可能オブジェクトをイテレータに変換します。- イテレータは一度しか反復できず、使い切ると再作成する必要があります。
例2:文字列とタプルから作成
例
# 文字列イテレータ
s = "hello"
iterator = iter(s)
print(next(iterator)) # 出力: h
print(next(iterator)) # 出力: e
print(next(iterator)) # 出力: l
# タプルイテレータ
t = (1, 2, 3)
iterator = iter(t)
print(next(iterator)) # 出力: 1
print(next(iterator)) # 出力: 2
s = "hello"
iterator = iter(s)
print(next(iterator)) # 出力: h
print(next(iterator)) # 出力: e
print(next(iterator)) # 出力: l
# タプルイテレータ
t = (1, 2, 3)
iterator = iter(t)
print(next(iterator)) # 出力: 1
print(next(iterator)) # 出力: 2
実行結果の予想:
h e l 1 2
コードの解説:
- 文字列イテレータは毎回1文字を返します。
- タプルイテレータは毎回1つの要素を返します。
例3:sentinel パラメータを使用
例
# sentinel を使用してカスタムイテレータを作成
def fibonacci():
n = 0
while True:
yield n
n += 1
if n > 10:
raise StopIteration
# sentinel を使用(特定の値を読み取ったら停止)
class ReadUntil:
def __init__(self, data, stop_at):
self.data = data
self.stop_at = stop_at
self.index = 0
def __iter__(self):
return self
def __next__(self):
if self.index >= len(self.data):
raise StopIteration
value = self.data[self.index]
if value == self.stop_at:
raise StopIteration
self.index += 1
return value
# イテレータを作成し、"END" に達したら停止
data = ["a", "b", "c", "END", "d"]
iterator = iter(lambda: ReadUntil(data, "END"), None)
for item in iterator:
print(item, end=" ")
# 出力: a b c
def fibonacci():
n = 0
while True:
yield n
n += 1
if n > 10:
raise StopIteration
# sentinel を使用(特定の値を読み取ったら停止)
class ReadUntil:
def __init__(self, data, stop_at):
self.data = data
self.stop_at = stop_at
self.index = 0
def __iter__(self):
return self
def __next__(self):
if self.index >= len(self.data):
raise StopIteration
value = self.data[self.index]
if value == self.stop_at:
raise StopIteration
self.index += 1
return value
# イテレータを作成し、"END" に達したら停止
data = ["a", "b", "c", "END", "d"]
iterator = iter(lambda: ReadUntil(data, "END"), None)
for item in iterator:
print(item, end=" ")
# 出力: a b c
実行結果の予想:
a b c
sentinel パラメータはカスタム反復動作を作成するために使用され、通常は callable と一緒に使用します。
その他の拡張