Python

【Python】リストの全要素になにかしらの処理を実行する方法

この記事では、Pythonでリストの全要素に関数などの処理を実行する方法を解説します。

リストの全要素に簡単な処理をしたい場合、いちいちfor文を使って処理するのはめんどくさいし効率が悪いです。

なので、Pythonに用意されている組み込み関数や内包表記を使って効率良く処理する方法を見ていきましょう❗️

ちなみに、リスト以外のイテラブルでも同様の処理が可能です。

リストの全要素に任意の関数を実行する

リストの全要素に任意の関数を実行した結果を受け取るにはmap()関数を使います。

map(function, iterable, ...)

function引数に指定した関数の引数としてiterable引数の要素を1つずつ渡し、処理した結果をイテレーターとして返します。

iterable引数は、複数指定できますが、第一引数で指定する関数はiterable引数の数だけ引数を取る必要があります

また、内包表記を使うことでも同様のことが実現可能です。内包表記については以下の記事を参考にしてください。

内包表記の種類と使い方を解説

サンプル

リストの全要素に2倍にするだけの関数を実行してみます。

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

l = [1, 2, 3]

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

実行結果

<map object at 0x10aac6ad0>

戻り値としてマップオブジェクト(イテレーター)が返されるのでprint()関数で出力したい場合はリストなどに変換する。

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

実行結果

[2, 4, 6]

もちろん、function引数にラムダ式も指定できます。

ラムダ式の使い方【匿名関数】

l = [1, 2, 3]

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

実行結果

[2, 4, 6]

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

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(function, iterable)

function引数に指定した関数の引数としてiterable引数の要素を1つずつ渡し、処理された結果がTrueの要素のみでイテレーターを構築して返します。

サンプル

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

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

l = [1, 2, 3, 4]

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

実行結果

<filter object at 0x10e702a70>

戻り値としてフィルターオブジェクト(イテレーター)が返されるのでprint()関数で出力したい場合はリストなどに変換する。

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

実行結果

[2, 4]

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

l = [1, 2, 3, 4]

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

実行結果

[2, 4]

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

l = [1, 2, 3, 4]

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

実行結果

[2, 4]

リストの全要素がTrueかどうか

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

all(iterable)

iterable引数に指定したリストの全要素がTrueならTrueを返し、1つでもFalseならFalseを返します。

サンプル

試しにリストに格納した要素がすべて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(iterable)

iterable引数に指定したリストの要素に1つでもTrueがあればTrueを返し、1つも無ければFalseを返します。

サンプル

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関数などの高階関数を使うことで、簡単に実装することができました。また、内包表記は高速かつ、お手軽なのでとても重宝します。

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