Python

【Python】イテラブルの全ての要素に何かしらの処理を実行する方法

この記事では、Pythonでイテラブルの全要素に関数などの処理を実行する方法を解説します。イテラブルの全要素に簡単な処理をしたい場合、for文をいちいち書いて処理するのはめんどくさいし効率もよくありません。なので、Pythonに用意されている組み込み関数や内包表記を使って、効率良くイテラブルを処理しましょう❗️

イテラブルの全ての要素に任意の関数を実行する

イテラブルの全要素に任意の関数を実行するには、map()関数、または内包表記を使います。

map()関数は、第一引数に指定した関数の引数として第二引数に指定したイテラブルの要素を1つずつ渡し、処理された結果を返します。

map(function, iterable, ...)
イテラブルは複数指定できますが、第一引数で指定する関数はイテラブルの数だけ引数を取る必要があります

内包表記については以下の記事を参考にしてください。

【Python】内包表記の種類と使い方を解説この記事では、Pythonの内包表記の使い方を解説します。内包表記を使うことで、単純なリストを低コストで生成することができます。また、同じ表記方法でジェネレータ式も使うことができます。それでは、内包表記の使い方を見ていきましょう!...

サンプル

渡された関数の引数として、配列の各要素が渡され処理が実行されます。

# 引数で受け取った値を2倍して返すだけの関数
def func(val):
    return val * 2

l = [1, 2, 3]

l_mul = map(func, l)
print(list(l_mul))

実行結果

[2, 4, 6]

もちろん、関数としてラムダ式も指定できます。

【Python】ラムダ式の使い方【匿名関数】この記事では、Pythonのラムダ式の使い方を解説します。ラムダ式を使うことでその場限りでしか使わないような簡単な関数を1行で表現することができます。関数オブジェクトが要求される箇所になら使用可能なので、よく高階関数と組み合わせて使用されます。...
l = [1, 2, 3]

l_mul = map(lambda val: val * 2, l)
print(list(l_mul))

実行結果

[2, 4, 6]

map()関数の戻り値は、map型のオブジェクトになります。なので、リストとして使用する場合はlist()で変換します

イテラブルを複数指定する場合は、関数やラムダ式の引数に注意。

l1 = [1, 2, 3]
l2 = [4, 5, 6]

# イテラブルを2つ指定したので、引数を2つ取るラムダ式を定義
result = map(lambda val1, val2: val1 * val2, l1, l2)
print(list(result))

実行結果

[4, 10, 18]

同じ処理を内包表記を使って実装することができます。

def func(val):
    return val * 2

l = [1, 2, 3]

l_mul = [func(val) for val in l]
print(list(l_mul))

実行結果

[2, 4, 6]

この程度の処理なら関数を使わなくても実装できます。

l = [1, 2, 3]

l_mul = [val * 2 for val in l]
print(list(l_mul))

実行結果

[2, 4, 6]

イテラブル内のTrueの要素のみを取得する

イテラブル内のTrueの要素のみ取得するには、filter()関数、または内包表記を使います。

filter()は、第一引数に指定した関数の引数として第二引数に指定したイテラブルの要素を1つずつ渡し、処理された結果がTrueの場合のみ要素を返します。

filter(function, iterable)

サンプル

以下のコードでは、リストの偶数の要素のみを取得しています。

def func(val):
    # 偶数ならTrueを返す
    return val % 2 == 0

l = [1, 2, 3, 4]

l = filter(func, l)
print(list(l))

実行結果

[2, 4]

関数には、ラムダ式が指定できます。

l = [1, 2, 3, 4]

l = filter(lambda val: val % 2 == 0, l)
print(list(l))

実行結果

[2, 4]

戻り値はfilter()型のオブジェクトになります。なので、リストとして使用する場合は、list()で変換します

同じ処理を内包表記を使って実装することができます。

l = [1, 2, 3, 4]

l = [val for val in l if val % 2 == 0]
print(list(l))

実行結果

[2, 4]

配列の全ての要素がTrueかどうか

配列の全ての要素がTrueかどうかを確認するには、all()関数を使います。

all()関数は、引数に指定した配列の全要素がTrueならばTrueを返し、1つでもFalseならばFalseを返します。

all(iterable)

サンプル

試しにリストに格納した要素がすべてTrueかどうかを判定してみます。

# 格納されている要素がすべてTrueのリスト
l = [True, True]
print(all(l))

# 格納されている要素がすべてTrueではないリスト
l = [True, False]
print(all(l))

実行結果

True
False

配列が空の場合は、Trueを返します。

l = []

print(all(l))

実行結果

True

配列に1つでもTrueがあるかどうか

配列に1つでもTrueがあるかどうかを確認するには、any()関数を使います。

any()関数は、引数に指定した配列の要素に1つでもTrueがあればTrueを返し、1つも無ければFalseを返します。

any(iterable)

サンプル

bool値を格納したリストを用いて使い方を確認してみます。

l = [True, True]
print(any(l))

l = [True, False]
print(any(l))

l = [False, False]
print(any(l))

実行結果

True
True
False

配列が空の場合は、Falseを返します。

l = []

print(any(l))

実行結果

False

配列の全ての要素がFalseかどうか

any()関数に否定であるnotをつけることで、全ての要素がFalseの場合のみTrueを返すようにできます。

l = [True, True]
print(not any(l))

l = [True, False]
print(not any(l))

l = [False, False]
print(not any(l))

実行結果

False
False
True

まとめ

この記事では、Pythonのイテラブルの全ての要素に処理を実行する方法を解説しました。

map関数やfilter関数などの高階関数を使うことで、簡単に実装することができました。また、内包表記は高速かつ、お手軽なのでとても重宝します。

それでは今回の内容はここまでです!ではまたどこかで〜( ・∀・)ノ

最短3か月でエンジニア転職『DMM WEBCAMP COMMIT』