Pythonで配列の全ての要素に対して処理や判定をする方法

Python

Pythonで配列の全ての要素に簡単な処理をしたい場合、for文をいちいち書いて処理するのはめんどくさいし効率もよくありません。

なので、Pythonに用意されている組み込み関数や内包表記を使って、もっと効率よく配列を処理しましょう!

配列の全ての要素に任意の処理をさせる

map(function, sequence)

map()は、「第一引数に関数」「第二引数に配列」を指定することで配列の全ての要素に関数を処理できます。

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

def func(val):
    return val * 2

l = [1, 2, 3]

l_mul = map(func, l)

print(list(l_mul))
# [2, 4, 6]

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

l = [1, 2, 3]

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

print(list(l_mul))# [2, 4, 6]

注意

  • map関数の戻り値はmap型のオブジェクトになります。なのでリストとして使用する場合はlist()で変換しましょう!
  • 引数に指定する関数は、配列の要素を1つずつ取り出して処理を施すために引数が1つの関数を指定する必要があります。

内包表記

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

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の要素のみ取得する

filter(function, iterable)

filter()は、「第一引数に関数」「第二引数に配列」を指定することで配列の全ての要素に関数を処理してTrueを返した要素のみを取得します。

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関数もmap関数と同様の注意が必要です。

  • 戻り値はfilter型のオブジェクトになります。なのでリストとして使用する場合はlist()で変換しましょう!
  • 引数が1つの関数を指定する必要がある。

内容表記

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

l = [1, 2, 3, 4]

l = [val for val in l if val % 2 == 0]

print(list(l))
# [2, 4]

配列の全ての要素がTrueかどうか判定[all(iterable)]

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

print(all([True, True]))
# True

print(all([True, False]))
# False

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

l = []

print(all(l))
# True

配列に1つでもTrueがあるかどうか判定[any(iterable)]

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

print(any([True, True]))
# True

print(any([True, False]))
# True

print(any([False, False]))
# False

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

l = []

print(any(l))
# False

配列の全ての要素がFalseかどうか判定 [not any(iterable)]

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

print(not any([True, True]))
# False

print(not any([True, False]))
# False

print(not any([False, False]))
# True

タイトルとURLをコピーしました