14.1 forループ
Pythonではタプルの要素をループで処理するには通常forループを使うよ。これは タプルの各要素に簡単にアクセスして、コードを実行するのに一番一般的な方法だね。
forループ
forループはタプルの各要素をループして、その 要素の値をforの後に指定した変数に一時的に 割り当てるよ。例:
my_tuple = (1, 2, 3, 4, 5)
for number in my_tuple:
print(number)
リストとforループを使った経験があるから、 実際的な例をいくつか見てみよう:
例1: タプルの要素の合計
タプルの全要素の合計を計算する例を見てみよう。
my_tuple = (10, 20, 30, 40, 50)
total = 0
for number in my_tuple:
total += number
print(f"タプルの要素の合計: {total}")
この例では、my_tupleというタプルと、totalという変数を作って 要素の合計を格納しているんだ。forループを使って、 タプルの各要素をループしtotalに足していくよ。最終的に タプルの全要素の合計が得られるね。
例2: 最大要素の探索
次に、タプルの最大要素を探す例を見てみよう。
my_tuple = (5, 17, 23, 11, 2)
max_value = my_tuple[0]
for number in my_tuple:
if number > max_value:
max_value = number
print(f"タプルの最大値: {max_value}")
この例では、max_valueという変数をまずタプルの最初の要素で 初期化しているよ。次に、全要素をループして現在の最大値と比べ、 より大きな値が見つかったらmax_valueを更新していく。
14.2 ネストしたタプル
タプルは他のタプルを含むことができるし、forループで ネストされたデータ構造をループすることができるよ。
nested_tuple = ((1, 2, 3), (4, 5, 6), (7, 8, 9))
for inner_tuple in nested_tuple:
for number in inner_tuple:
print(number, end=' ')
print()
この例ではnested_tupleがタプルを含んでいるね。ネストされた forループを使って、ネストされたタプルの各要素をループするよ。 実行結果は:
1 2 3
4 5 6
7 8 9
14.3 インデックス付きのforループ
リストと同じようにタプルの要素にもインデックスがあるから、 forループ(range()関数と組み合わせて)を 使って要素を回ることができるよ。これにより、要素だけでなくその位置も扱うことができるので、 より複雑なデータ操作を行う際に便利だね。
インデックス付きイテレーションの基礎
タプルをイテレーションしつつ、各要素のインデックスにアクセスしたい場合はこんな感じのコードを使うんだ:
my_tuple = ('a', 'b', 'c', 'd')
for i in range(len(my_tuple)):
print(f'index: {i}, Element: {my_tuple[i]}')
インデックスの使用利点
インデックスを使うと、タプルの複数の要素に同時にアクセスする アルゴリズムを簡単に実装できるよ。例えば、現在の要素を前または次の 要素と比較するなんてね。
例:
my_tuple = (15, 20, 23, 18, 22, 19, 21)
for i in range(1, len(my_tuple)):
if my_tuple[i] > my_tuple[i - 1]: # 前の要素と比較する
print(f'{my_tuple[i]} is greater than {my_tuple[i - 1]}')
インデックスを使ったデータ処理のためのforループ
例えば、1週間の温度データを含むタプルがあって、 極端な値(最も低い温度と最も高い温度)を除いて平均温度を計算したいとするよ。
temperatures = (15, 20, 23, 18, 22, 19, 21)
sorted_temps = sorted(temperatures)
# 最初と最後の温度を除く
filtered_temps = sorted_temps[1:-1]
average_temp = sum(filtered_temps) / len(filtered_temps)
print(f"極端な値を除いた週の平均温度: {average_temp}")
14.4 enumerate()関数の使用
Pythonでは、enumerate()関数がタプルの要素を そのインデックスと一緒にループする便利な方法を提供してくれるよ。 これは特に、リストの要素とインデックスをループ内で扱う必要がある場合に役立つね。
enumerate()関数の基礎
enumerate()関数はタプルを特別なオブジェクトでラップして インデックスとタプルの要素の値のペアを生成するイテレータを返すよ:
my_tuple = ('apple', 'banana', 'cherry')
for index, element in enumerate(my_tuple):
print(f'index: {index}, Element: {element}')
これで要素だけでなくそのインデックスも手に入れたよ。
enumerate()の利点
enumerate()を使うとコードが読みやすくなり、 range(len(…))を使ってインデックスを手動で管理する必要がなくなるよ。 これにより、リストの要素を変更したり、アクセスしたり、条件チェックを 行うのが簡単になるね。
使用例
時々、特定の値がタプルのどのインデックスに現れるかを全て見つける必要があるんだ。
my_tuple = (1, 2, 3, 2, 4, 2, 5)
search_value = 2
indices = []
for index, value in enumerate(my_tuple):
if value == search_value:
indices.append(index)
print(f"値 {search_value} が現れるインデックス: {indices}")
このコードはタプルの中で値2が現れる全インデックスを見つけるよ:
値 2 が現れるインデックス: [1, 3, 5]
インデックスに基づくデータフィルタリング
インデックスに基づいてデータをフィルタリングする例を見てみよう。奇数インデックスの要素だけを残す場合だね。
my_tuple = ('a', 'b', 'c', 'd', 'e', 'f')
filtered_tuple = tuple(value for index, value in enumerate(my_tuple) if index % 2 == 0)
print(f"偶数インデックスの要素を持つタプル: {filtered_tuple}")
このコードは偶数インデックスの要素のみを含む新しいタプルを作成するよ:
偶数インデックスの要素を持つタプル: ('a', 'c', 'e')
GO TO FULL VERSION