Pythonで配列の各要素の出現回数が一意かどうかを判定する方法
この記事では、Pythonを使って配列内の各要素の出現回数がすべて一意(ユニーク)であるかどうかを判定する方法を解説します。
例えば、配列 [1, 1, 2, 2, 2, 3, 4, 4, 4, 4] の場合、要素「1」は2回、「2」は3回、「3」は1回、「4」は4回出現しており、それぞれの出現回数が異なるため true を返します。逆に、同じ出現回数を持つ要素が複数存在する場合は false を返します。
解決のためのアプローチ
この問題は、次の手順で解決できます。
- まず、配列内の各要素の出現回数(頻度)を求めます。
- 次に、頻度マップ内の各キーと値のペアについて以下を確認します。
- その値(出現回数)がすでに別のマップ mp に存在する場合は false を返します。
- 存在しない場合は mp[value] := 1 として記録します。
- すべてのチェックを通過できたら true を返します。
実装例
理解を深めるために、実際のPythonコードを見てみましょう。
class Solution(object):
def uniqueOccurrences(self, arr):
d = {}
for i in arr:
if i not in d:
d[i] = 1
else:
d[i] += 1
l = {}
for x, y in d.items():
if y in l:
return False
l[y] = 1
return True
ob1 = Solution()
print(ob1.uniqueOccurrences([1,1,2,2,2,3,4,4,4,4]))コードのポイント
- 最初の辞書
dで各要素の出現回数をカウントします。 - 2つ目の辞書
lを使い、すでに記録済みの出現回数と重複していないかをチェックします。 - ループを最後まで抜けられれば、すべての出現回数が一意であることが確定し、true を返します。
なお、標準ライブラリの collections.Counter を使えば、頻度カウントの部分をより簡潔に記述することも可能です。
入力
[1,1,2,2,2,3,4,4,4,4]
出力
true
-
Pythonで数値の一意な素因数の積を求める方法
この記事では、以下の問題文に対する解決策について学びます。問題文数値 n が与えられたとき、その数値が持つすべての一意な素因数の積を求めて返します。例入力: num = 11 出力: 積は 11説明ここでは、入力された数値は 11 であり、素因数は 11 のみです。したがって、その積は 11 となります。アプローチ1:総当たり法i = 2 から n+1 までの for ループを使用し、i が n の因数であるかどうかを確認します。因数であれば、さらに i 自体が素数かどうかを判定し、素数であれば product 変数に積を格納します。この処理を i が n になるまで繰り返します。コード例de
-
Pythonで階乗を計算する3つの方法|forループ・再帰・math.factorial()の使い方
階乗(factorial)の計算は、データ分析をはじめとする数学的な処理において、Pythonでよく求められる操作の一つです。階乗とは、正の整数 n に対して、1から n までのすべての整数を掛け合わせた値のことです(例:5! = 1 × 2 × 3 × 4 × 5 = 120)。この記事では、Pythonで階乗を求める3つの方法を、コード例と実行結果とともにわかりやすく解説します。方法1:forループを使うforループで1から目的の数値まで順番に処理し、各ステップで掛け算を繰り返していく方法です。以下のプログラムでは、ユーザーに数値の入力を促し、ループ処理の前にint()で入力値を整数に変換