Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonでリスト内の特定条件に一致する要素数をカウントする方法

この記事では、Pythonのリストから特定の条件に一致する要素だけを取り出し、その個数をカウントする方法を解説します。あらかじめ条件を設計し、その条件を満たす要素のみを選択して、件数を出力するという流れになります。

ここでは、代表的な3つのアプローチを紹介します。

方法1:in演算子とsum関数を組み合わせる

最もシンプルな方法です。リスト内包表記の中でin演算子を使って条件に一致するかどうかを判定し、一致すれば1、しなければ0が返されます。その結果をsum関数で合計することで、条件を満たす要素の個数が求まります。

サンプルコード

Alist = ['Mon', 'Wed', 'Mon', 'Tue', 'Thu']
# 元のリスト
print("Given list:\n", Alist)
cnt = sum(1 for i in Alist if i in('Mon','Wed'))
print("Number of times the condition is satisfied in the list:\n",cnt)

実行結果

上記のコードを実行すると、次のような出力が得られます。

Given list:
['Mon', 'Wed', 'Mon', 'Tue', 'Thu']
Number of times the condition is satisfied in the list:
3

この例では、「Mon」または「Wed」に一致する要素が3つあるため、結果は3となります。

方法2:map関数とlambda式を使う

こちらもin演算子による条件判定を使用しますが、lambda式とmap関数を組み合わせる点が特徴です。各要素に対して条件判定(True/False)を行い、最後にsum関数で合計することでカウントを取得します。

サンプルコード

Alist = ['Mon', 'Wed', 'Mon', 'Tue', 'Thu']
# 元のリスト
print("Given list:\n", Alist)
cnt=sum(map(lambda i: i in('Mon','Wed'), Alist))
print("Number of times the condition is satisfied in the list:\n",cnt)

実行結果

上記のコードを実行すると、次のような出力が得られます。

Given list:
['Mon', 'Wed', 'Mon', 'Tue', 'Thu']
Number of times the condition is satisfied in the list:
3

TrueはPythonでは1として扱われるため、mapの結果をそのまま合計できるのがポイントです。

方法3:reduce関数を使う

functoolsモジュールのreduce関数は、引数として渡されたリストのすべての要素に対して、指定した関数を順番に適用していきます。ここでは初期値0を設定し、各要素が条件に一致するたびにカウントを1ずつ加算していくことで、最終的に条件に一致する要素の総数を求めます。

サンプルコード

from functools import reduce
Alist = ['Mon', 'Wed', 'Mon', 'Tue', 'Thu']
# 元のリスト
print("Given list:\n", Alist)
cnt = reduce(lambda count, i: count + (i in('Mon','Wed')), Alist, 0)
print("Number of times the condition is satisfied in the list:\n",cnt)

実行結果

上記のコードを実行すると、次のような出力が得られます。

Given list:
['Mon', 'Wed', 'Mon', 'Tue', 'Thu']
Number of times the condition is satisfied in the list:
3

まとめ

いずれの方法でも同じ結果が得られますが、一般的には可読性の高い「方法1(in演算子+sum)」が推奨されます。処理の意図やコードベースのスタイルに応じて、map・lambda、reduceといった手法も使い分けるとよいでしょう。また、単純に特定の値の出現回数を数えたい場合は、list.count()メソッドを使うのも有効です。

  1. Pythonでリスト内の一意な要素をカウントする方法

    Pythonのリストには、同じ要素が複数含まれていることがあります。len()関数でリストの長さを取得すると、重複した要素も含めた全体の長さが返されます。しかし、場合によっては重複を除いた「一意な要素(ユニークな要素)」の数だけを知りたいこともあるでしょう。この記事では、collectionsモジュールのCounterクラスを使って、リスト内の個別の要素数を取得する方法を解説します。CounterクラスとはcollectionsモジュールのCounterは、ハッシュ可能なオブジェクトをカウントするためのdictのサブクラスです。要素が辞書のキーとして格納され、その出現回数が辞書の値として保存さ

  2. 【Python】タプルが出現するまでリスト内の要素数をカウントする方法

    リストAが与えられたとき、このリストにはネストされたタプルが含まれています。ここでの課題は、タプルの要素に到達するまで、リスト内の要素数をカウントすることです。この処理には、Python組み込みの isinstance() 関数を使用します。 isinstance() 関数は2つの引数を受け取ります。第1引数の「object」は判定対象となるオブジェクト、第2引数の「classinfo」はクラス・型、あるいはクラスや型のタプルです。オブジェクトが指定したクラス(またはそのサブクラス)のインスタンスである場合、もしくはタプル内のいずれかの型に一致する場合に True を返し、それ以外の場合は F