Pythonでリスト内の正の数と負の数をカウントする方法
この記事では、リスト内に含まれる正の数と負の数をそれぞれカウントする方法について、2つの異なるアプローチをわかりやすく解説します。
問題定義
リスト(イテラブル)が与えられたとき、その中に含まれる正の数と負の数の個数を数えることを目指します。
ここでは、以下の2つのアプローチを取り上げます。
- 総当たり(ブルートフォース)方式
- lambda関数とfilter関数を組み合わせた方法
アプローチ1:総当たり方式
最も基本的な方法は、forループでリストを順番に走査し、各要素が0以上かどうかを条件分岐で判定するものです。0以上であれば正の数のカウンターを、それ以外の場合は負の数のカウンターを1ずつ増やしていきます。
コード例
list1 = [1,-9,15,-16,13]
pos_count, neg_count = 0, 0
for num in list1:
if num >= 0:
pos_count += 1
else:
neg_count += 1
print("Positive numbers : ", pos_count)
print("Negative numbers : ", neg_count)
実行結果
Positive numbers : 3 Negative numbers : 2
アプローチ2:lambda関数とfilter関数を使う方法
より簡潔にコードを書きたい場合には、filter()関数とlambda式(無名関数)を組み合わせる方法が便利です。条件を満たす要素だけを抽出し、len()で抽出後のリストの長さを取得することで、正と負の数をそれぞれカウントできます。
コード例
list1 = [1,-9,15,-16,13]
neg_count = len(list(filter(lambda x: (x < 0), list1)))
pos_count = len(list(filter(lambda x: (x >= 0), list1)))
print("Positive numbers : ", pos_count)
print("Negative numbers : ", neg_count)
実行結果
Positive numbers : 3 Negative numbers : 2
まとめ
この記事では、リスト内の正の数と負の数をカウントする2つの方法を学びました。初心者には可読性の高いforループによる処理がおすすめですが、ワンライナーで簡潔に書きたい場合はlambdaとfilterの組み合わせが有効です。どちらの方法でも同じ結果が得られるため、用途やコードスタイルに応じて使い分けるとよいでしょう。
-
【Python】Lambda式で正の数と負の数を並べ替える方法
本記事では、正の整数と負の整数が混在する配列を入力として受け取り、それらを「負の数のグループ」と「正の数のグループ」に分けて並べ替える方法について解説します。 ここでは、引数として整数の配列を1つだけ受け取る Rearrange() 関数を定義します。この関数は、負の数を配列の先頭側へ、正の数(0を含む)を末尾側へそれぞれまとめたうえで、2つのリストを結合して返します。 それでは、実際のコードを見ながら具体的な動作を確認していきましょう。 コード例 def Rearrange(arr): # 最初の条件式は、arr 内の負の数のみを抽出したリストを返します。 # 2番目の条件式は、arr 内
-
【Python】行・列ソート済み行列に含まれる負の数を効率的にカウントする方法
この記事では、行方向・列方向にソートされた行列(row-wise and column-wise sorted matrix)に含まれる負の数を、計算量の少ない最適なアルゴリズムでカウントするPythonプログラムを紹介します。 行・列ソート済み行列とは 「行・列ソート済み配列」とは、任意の位置にある値が、同じ行の右隣の値、および同じ列の下の値と比較して小さいか等しい(昇順になっている)行列のことです。つまり、左から右へ、上から下へと向かって値が増えていく構造を持っています。 例:行列Mの場合 M = [[-40, -12, 1, 5], [-35, -2, 5, 15],