このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。

【Python入門】イテラブルに適用する関数

イテラブルに適用する関数

 Pythonのイテラブルは、リスト、タプル、文字列、辞書、集合、さらにはrangeオブジェクトなど、反復可能なデータ構造を指します。これらに対して適用できる関数は、データのサイズ取得、並べ替え、要素の変換、選別、そして反復処理など、幅広い操作を簡潔に実装するための強力なツールとなります。
 ここでは、イテラブルに適用する代表的な関数(len、range、enumerate、reversed、zip、map、filter、all、any、iter、next)について、各関数の基本的な使い方と特徴を、表や具体例を交えて解説します。

プログラムのダウンロード

 「ダウンロード」から、JupyterLab で実行できるサンプルプログラムがダウンロードできます。ファイルは、ESET Endpoint Securityでウイルスチェックをしておりますが、ダウンロードとプログラムの実行は自己責任でお願いいたします。

1.基本的なイテラブル関数

1.1. len関数

 len関数は、文字列、リスト、タプル、集合、辞書、rangeオブジェクトなどの長さ(要素数)を返します。

【構文】

len(オブジェクト)
説明
len("Hello")文字列の長さ(5)
len([1, 2, 3])リストの要素数(3)

【例】

print("Length of 'Hello':", len("Hello"))  # 出力: 5
print("Length of [1, 2, 3]:", len([1, 2, 3]))  # 出力: 3

実行結果

Length of 'Hello': 5
Length of [1, 2, 3]: 3

解説

len("Hello") は文字数5を返し、リストの場合も同様に要素数が返されます。

1.2. range関数

 range関数は、整数のシーケンス(rangeオブジェクト)を生成します。実際にはクラスですが、for文などでの反復処理に頻繁に用いられます。

【構文】

range(終了値)        → 0 から 終了値-1
range(開始値, 終了値)    → 開始値から 終了値-1
range(開始値, 終了値, ステップ) → 指定した間隔で数値を生成

【例】

# 0から9までの整数を生成
print(list(range(10)))  # 出力: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

# 5から14までの整数を生成
print(list(range(5, 15)))  # 出力: [5, 6, 7, 8, 9, 10, 11, 12, 13, 14]

# 0から20まで、2ずつ増加する整数を生成
print(list(range(0, 21, 2)))  # 出力: [0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20]

実行結果

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20]

解説

range関数は開始値、終了値、ステップを指定することで柔軟に整数のシーケンスを生成します。

1.3. enumerate関数

 enumerate関数は、イテラブルから要素を取り出す際に、各要素のインデックス(順番)も同時に取得できる機能です。

【構文】

enumerate(イテラブル, 開始値)
説明
enumerate(['a', 'b', 'c'])0から順に (0, 'a'), (1, 'b'), (2, 'c')
enumerate(['a', 'b', 'c'], 1)1から順に (1, 'a'), (2, 'b'), (3, 'c')

【例】

fruits = ["apple", "banana", "cherry"]
for index, fruit in enumerate(fruits, 1):
    print(f"Item {index}: {fruit}")

実行結果

Item 1: apple
Item 2: banana
Item 3: cherry

解説

 この例では、fruitsリストの各要素とその順番が1からカウントされ、"Item 1: apple" などの形式で出力されます。

1.4. reversed関数

reversed関数は、イテラブルの要素を逆順に反復できるイテレータを返します。

【構文】

reversed(イテラブル)

【例】

numbers = [1, 2, 3, 4, 5]
print("Reversed list:", list(reversed(numbers)))  # 出力: [5, 4, 3, 2, 1]

実行結果

Reversed list: [5, 4, 3, 2, 1]

解説

reversed関数は、元のリストを変更せず、逆順に要素を取り出すイテレータを返します。

2.複数のイテラブルを扱う関数

2.1. zip関数

 zip関数は、複数のイテラブルから同時に要素を取り出し、対応する要素をタプルにまとめたイテレータを返します。

【構文】

zip(イテラブル1, イテラブル2, …)
説明
zip([1, 2, 3], ['a', 'b', 'c'])[(1, 'a'), (2, 'b'), (3, 'c')]

【例】

names = ["apple", "orange", "grape"]
prices = [100, 150, 120]
for name, price in zip(names, prices):
    print(f"{name} is {price} yen")

実行結果

apple is 100 yen
orange is 150 yen
grape is 120 yen

解説

zip関数は、複数のリストの各要素をタプルにまとめ、"apple is 100 yen" などの出力を生成します。

3.イテラブルの各要素に関数を適用する関数

3.1. map関数

 map関数は、指定した関数をイテラブルの全ての要素に適用し、その結果を返すイテレータを生成します。

【構文】

map(関数, イテラブル, …)

【例】

words = ["pineapple", "kiwi", "strawberry"]
lengths = list(map(len, words))
print("Lengths:", lengths)  # 出力: [9, 4, 10]

実行結果

Lengths: [9, 4, 10]

解説

map関数は、wordsリストの各要素にlen関数を適用して、文字数のリストを生成します。

3.2. filter関数

 filter関数は、イテラブルの各要素に対して条件関数を適用し、条件がTrueとなる要素だけを返すイテレータを生成します。

【構文】

filter(関数, イテラブル)

【例】

data = ["", "sun", "moon", "", "stars"]
non_empty = list(filter(len, data))
print("Non-empty items:", non_empty)  # 出力: ['sun', 'moon', 'stars']

実行結果

Non-empty items: ['sun', 'moon', 'stars']

解説

 filter関数は、各要素に対してlen関数を適用し、空文字列(長さ0)はFalseと判断されるため、非空の文字列のみが抽出されます。

4.ブール判定とイテレータ操作の関数

4.1. all関数とany関数

 all関数はイテラブルの全要素がTrueである場合にTrueを返し、any関数は少なくとも1つの要素がTrueであればTrueを返します。これらは内包表記と組み合わせると、条件チェックに便利です。

【構文】

all(イテラブル) 
any(イテラブル)
説明
all(x > 0 for x in [1, 2, 3])全要素が0より大きければTrue
any(x < 0 for x in [1, 2, -3, 4])1つでも負の値があればTrue

【例】

scores1 = [85, 90, 78, 92]
scores2 = [85, 45, 78, 92]
print("All scores >= 50 in scores1:", all(x >= 50 for x in scores1))  # True
print("Any score < 50 in scores2:", any(x < 50 for x in scores2))       # True

実行結果

All scores >= 50 in scores1: True
Any score < 50 in scores2: True

解説

 all関数とany関数を使うと、条件を満たすかどうかを簡単に判定でき、テストやフィルタリングに活用できます。

4.2. iter関数とnext関数

 iter関数は、イテラブルからイテレータを生成し、next関数はそのイテレータから次の要素を順に取り出します。

【構文】

iter(イテラブル) 
next(イテレータ)

【例】

numbers = [10, 20, 30]
it = iter(numbers)
print("First element:", next(it))  # 10
print("Second element:", next(it))  # 20
print("Third element:", next(it))  # 30
# ここでさらにnext(it)を呼ぶとStopIterationが発生

実行結果

First element: 10
Second element: 20
Third element: 30

解説

  • iter関数はリストからイテレータを生成し、next関数を呼ぶたびに順番に要素が返されます。
  • 全要素を取り出した後にnextを呼ぶと、StopIteration例外が発生します。

まとめ

Pythonのイテラブルに適用する関数は、データ構造を操作する上で極めて重要です。

  • len、range、enumerate、reversedは基本的なイテラブルの情報取得や反復処理に使われます。
  • zip関数を利用すれば、複数のイテラブルを同時に扱うことができ、mapとfilterは各要素に対する処理や選別を容易にします。
  • all、anyは条件判定に役立ち、iterとnextはイテレータの細かい制御を可能にします。

 これらの関数を適切に活用することで、Pythonプログラミングにおけるデータ操作がより効率的かつ柔軟になり、コードの可読性と保守性が向上します。