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

Pythonでリスト内の正の数と負の数をカウントする方法【初心者向け解説】

この記事では、リスト内に含まれる正の数と負の数をそれぞれカウントして表示する方法について解説します。Pythonには複数の実装アプローチがあり、それぞれの特徴を理解することで、状況に応じた最適なコードを書けるようになります。

問題定義

課題: リスト(イテラブル)が与えられたとき、その中に含まれる正の数と負の数をそれぞれカウントし、結果を表示する必要があります。

方法1:forループを使った反復処理

最も基本的なアプローチです。forループでリストの各要素を順番に取り出し、「num >= 0」という条件式で正の数かどうかを判定します。条件が真(True)であれば pos_count を、そうでなければ neg_count を1ずつ増やしていきます。

サンプルコード

list1 = [1,-2,-4,6,7,-23,45,-0]
pos_count, neg_count = 0, 0
# 拡張forループ
for num in list1:
    # 正の数かどうかを判定
    if num >= 0:
        pos_count += 1
    else:
        neg_count += 1
print("Positive numbers in the list: ", pos_count)
print("Negative numbers in the list: ", neg_count)

実行結果

Positive numbers in the list: 5
Negative numbers in the list: 3

方法2:whileループを使った反復処理

次に、whileループを使用する方法を見ていきましょう。インデックス番号(num)を管理しながら、リストの長さに達するまで各要素を判定していきます。ロジック自体はforループの場合と同じですが、ループ変数の手動インクリメントが必要な点が異なります。

サンプルコード

list1 = [1,-2,-4,6,7,-23,45,-0]
pos_count, neg_count = 0, 0
num = 0
# whileループ
while(num < len(list1)):
    # 判定処理
    if list1[num] >= 0:
        pos_count += 1
    else:
        neg_count += 1
    # numをインクリメント
    num += 1
print("Positive numbers in the list: ", pos_count)
print("Negative numbers in the list: ", neg_count)

実行結果

Positive numbers in the list: 5
Negative numbers in the list: 3

方法3:ラムダ式とfilter関数を活用する

よりPythonらしい簡潔な書き方として、filter関数とラムダ式(無名関数)を組み合わせる方法があります。条件に合致する要素だけを抽出し、その要素数を len() 関数で取得することで、正負の数を直接判別できます。

サンプルコード

list1 = [1,-2,-4,6,7,-23,45,-0]
neg_count = len(list(filter(lambda x: (x < 0), list1)))
pos_count = len(list(filter(lambda x: (x >= 0), list1)))
print("Positive numbers in the list: ", pos_count)
print("Negative numbers in the list: ", neg_count)

実行結果

Positive numbers in the list: 5
Negative numbers in the list: 3

なお、上記のすべてのコード例では、変数はローカルスコープ内で宣言されており、スコープの観点でも安全な実装となっています。

まとめ

この記事では、Pythonのリスト内にある正の数と負の数をカウントする3つの方法を紹介しました。

  • forループ: 可読性が高く、初心者にも理解しやすい基本の書き方
  • whileループ: インデックス操作が必要な場面で有効
  • filter+ラムダ式: コードが簡潔になり、Pythonらしい関数型スタイルの記述が可能

簡単な処理であればforループで十分ですが、コードの簡潔さを重視するならfilter関数との組み合わせも検討してみてください。用途やチームのコーディング規約に応じて、最適な方法を選択しましょう。

  1. 【Python】Lambda式で正の数と負の数を並べ替える方法

    本記事では、正の整数と負の整数が混在する配列を入力として受け取り、それらを「負の数のグループ」と「正の数のグループ」に分けて並べ替える方法について解説します。 ここでは、引数として整数の配列を1つだけ受け取る Rearrange() 関数を定義します。この関数は、負の数を配列の先頭側へ、正の数(0を含む)を末尾側へそれぞれまとめたうえで、2つのリストを結合して返します。 それでは、実際のコードを見ながら具体的な動作を確認していきましょう。 コード例 def Rearrange(arr): # 最初の条件式は、arr 内の負の数のみを抽出したリストを返します。 # 2番目の条件式は、arr 内

  2. 【Python】行・列ソート済み行列に含まれる負の数を効率的にカウントする方法

    この記事では、行方向・列方向にソートされた行列(row-wise and column-wise sorted matrix)に含まれる負の数を、計算量の少ない最適なアルゴリズムでカウントするPythonプログラムを紹介します。 行・列ソート済み行列とは 「行・列ソート済み配列」とは、任意の位置にある値が、同じ行の右隣の値、および同じ列の下の値と比較して小さいか等しい(昇順になっている)行列のことです。つまり、左から右へ、上から下へと向かって値が増えていく構造を持っています。 例:行列Mの場合 M = [[-40, -12, 1, 5], [-35, -2, 5, 15],