Pythonでリスト内の要素xについてx+1も存在する要素の数を数える方法
Pythonでは、数値のリストが与えられたとき、「その要素 x に対して x + 1 も同じリスト内に存在する」という条件を満たす要素の個数を求める問題を効率的に解くことができます。
例えば、入力が [2, 3, 3, 4, 8] の場合を考えてみましょう。
- 2 については 3 が存在するためカウント対象
- 3(1つ目)については 4 が存在するためカウント対象
- 3(2つ目)についても同様にカウント対象
- 4 については 5 が存在しないため対象外
- 8 については 9 が存在しないため対象外
したがって、出力は 3 となります。
解法のアプローチ
この問題は、以下の手順で解くことができます。
- リスト
numsの要素からセット(set)sを作成する - カウンター
countを 0 で初期化する numsの各要素iについて、i + 1がセットsに存在するかどうかを確認する- 存在する場合は
countを 1 増やす - 最後に
countを返す
セットを使用することで、要素の存在確認が O(1) の計算量で行えるため、全体の処理時間は O(n) に抑えられます。これは大きなリストを扱う場合に非常に有効です。
実装例
それでは、実際のコードを見てみましょう。
class Solution:
def solve(self, nums):
s = set(nums)
count = 0
for i in nums:
if i+1 in s:
count += 1
return count
ob = Solution()
nums = [2, 3, 3, 4, 8]
print(ob.solve(nums))
入力
[2, 3, 3, 4, 8]
出力
3
コードのポイント
set(nums)によって重複を排除したセットを作成し、高速な存在判定を実現しています。- 重複する要素(この例では 3 が2つ)もそれぞれ独立にカウントされる点に注意してください。
- 時間計算量は O(n)、空間計算量も O(n) であり、効率的なアルゴリズムです。
-
Pythonでリスト内の正の数と負の数をカウントする方法
この記事では、リスト内に含まれる正の数と負の数をそれぞれカウントする方法について、2つの異なるアプローチをわかりやすく解説します。 問題定義 リスト(イテラブル)が与えられたとき、その中に含まれる正の数と負の数の個数を数えることを目指します。 ここでは、以下の2つのアプローチを取り上げます。 総当たり(ブルートフォース)方式 lambda関数とfilter関数を組み合わせた方法 アプローチ1:総当たり方式 最も基本的な方法は、forループでリストを順番に走査し、各要素が0以上かどうかを条件分岐で判定するものです。0以上であれば正の数のカウンターを、それ以外の場合は負の数のカウンターを1ずつ
-
Pythonでリスト内の一意な要素をカウントする方法
Pythonのリストには、同じ要素が複数含まれていることがあります。len()関数でリストの長さを取得すると、重複した要素も含めた全体の長さが返されます。しかし、場合によっては重複を除いた「一意な要素(ユニークな要素)」の数だけを知りたいこともあるでしょう。この記事では、collectionsモジュールのCounterクラスを使って、リスト内の個別の要素数を取得する方法を解説します。CounterクラスとはcollectionsモジュールのCounterは、ハッシュ可能なオブジェクトをカウントするためのdictのサブクラスです。要素が辞書のキーとして格納され、その出現回数が辞書の値として保存さ