[Python]配列にフィルターをかけるには?

python

どうも、ちょげ(@chogetarou)です。

配列(array)にフィルターをかける方法を紹介します。

スポンサーリンク

リストもしくはArray.arrayの場合

リストもしくはArray.arrayにフィルターをかける方法は、2つあります。

filter()

ひとつは、filter()を使う方法です。

まず、filter()を呼び出します。

filter()の第1引数に1つの引数を持つ関数、第2引数に対象のリストを指定します。

そして、第1引数の関数で条件式を返します。

条件式では、関数の引数でリストもしくはArray.arrayの要素を取得します。

#arr=対象のリストもしくはArray.array, funcition=条件式を返す関数(1つの引数を持ち、引数で要素を取得)
result = filter(function, arr)

上記のfilter()は、関数で返した条件式を満たすリストもしくはArray.arrayの要素を全てfilterオブジェクトとして取得します。

filter()の結果を、リストもしくはArray.arrayで取得したい場合は、filterオブジェクトをそれぞれに変換します。

#結果をリストとして取得
result = list(filter(funcition, arr))
#結果をarray.arrayとして取得
result = array.array('i', filter(function, arr))

使用例

nums = [1, 2, 3, 4, 5, 6]

result = list(filter(lambda x: x % 2 == 0, nums))

print(result)
出力:
[2, 4, 6]

内包表記

もうひとつは、内包表記を使う方法です。

まず、内包表記で、リストもしくはArray.arrayをfor文でループし、ループ変数を結果として返します。

そして、for文の後ろに、if文で要素の条件式を指定します。

if文の条件式では、for文のループ変数でリストもしくはArray.arrayの要素を取得します。

#list=対象のリスト, condition=要素の条件式
#条件式ではfor文のループ変数(x)で要素を取得
result = [x for x in list if condition]

上記の内包表記は、条件式を満たすリストもしくはArray.arrayの要素を全て取得します。

使用例

nums = [1, 2, 3, 4, 5, 6]

result = [x for x in nums if x % 2 == 0]

print(result)
出力:
[2, 4, 6]

Numpy配列の場合

Numpy配列にフィルターをかけるには、[]を使います。

まず、Numpy配列名と[]を記述します。

そして、[]内に、Numpy配列と比較する条件式を指定します。

#arr=対象のNumpy配列, condition=Numpy配列と比較する条件式
result = arr[condition]

上記の[]は、[]内に指定した条件式を満たすNumpy配列の要素を全て取得します。

使用例

import numpy as np

nums = np.array([1, 2, 3, 4, 5, 6])

result = nums[nums % 2 == 0]

print(result)
出力:
[2 4 6]

まとめ

リストもしくはArray.arrayにフィルターをかける方法は、次の2つです。

  • filter()を使う方法
    result = filter(function, arr)
  • 内包表記を使う方法
    result = [x for x in list if condition]

Numpy配列にフィルターをかけるには、[]を使います。

#Numpy配列にフィルターをかける
result = arr[condition]

コメント

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