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()メソッドを使うのも有効です。
-
Pythonでリスト内の一意な要素をカウントする方法
Pythonのリストには、同じ要素が複数含まれていることがあります。len()関数でリストの長さを取得すると、重複した要素も含めた全体の長さが返されます。しかし、場合によっては重複を除いた「一意な要素(ユニークな要素)」の数だけを知りたいこともあるでしょう。この記事では、collectionsモジュールのCounterクラスを使って、リスト内の個別の要素数を取得する方法を解説します。CounterクラスとはcollectionsモジュールのCounterは、ハッシュ可能なオブジェクトをカウントするためのdictのサブクラスです。要素が辞書のキーとして格納され、その出現回数が辞書の値として保存さ
-
【Python】タプルが出現するまでリスト内の要素数をカウントする方法
リストAが与えられたとき、このリストにはネストされたタプルが含まれています。ここでの課題は、タプルの要素に到達するまで、リスト内の要素数をカウントすることです。この処理には、Python組み込みの isinstance() 関数を使用します。 isinstance() 関数は2つの引数を受け取ります。第1引数の「object」は判定対象となるオブジェクト、第2引数の「classinfo」はクラス・型、あるいはクラスや型のタプルです。オブジェクトが指定したクラス(またはそのサブクラス)のインスタンスである場合、もしくはタプル内のいずれかの型に一致する場合に True を返し、それ以外の場合は F