Pythonでリストが厳密に増加・減少しているかを判定するプログラムの作成方法
数値のリストが与えられたとき、そのリストが厳密に増加しているか、あるいは厳密に減少しているかどうかを判定することを考えてみましょう。
ここで「厳密に増加」とは、すべての要素が互いに異なり、各要素が必ず直前の要素より大きい状態を指します。たとえば、入力が nums = [10, 12, 23, 34, 55] の場合、どの要素も重複しておらず、前の要素より常に大きいため、出力は True となります。
解決のための手順
この問題は、以下のステップに沿って解くことができます。
numsのサイズが 2 以下である場合はTrueを返します。nums内に重複した要素が存在する場合はFalseを返します。orderedとして、numsを昇順にソートした新しいリストを作成します。numsがorderedと一致する場合は厳密に増加、orderedを逆順にしたものと一致する場合は厳密に減少と判断し、Trueを返します。いずれにも該当しなければFalseを返します。
それでは、実際の実装例を見てみましょう。
サンプルコード
class Solution: def solve(self, nums): if len(nums) <= 2: return True if len(set(nums)) != len(nums): return False ordered = sorted(nums) return nums == ordered or nums == ordered[::-1] ob = Solution() print(ob.solve([10, 12, 23, 34, 55]))
入力
[10, 12, 23, 34, 55]
出力
True
このように、元のリストをソートした結果と比較するだけで、増加・減少のどちらのパターンにも対応できるシンプルな判定ロジックを実装できます。set() を使った重複チェックと組み合わせることで、厳密な単調性を効率よく検証できます。
-
Pythonでブロックの高さリストが直線y=xに対して対称かどうかを判定するプログラム
数値のリスト nums があるとします。これは正方形のブロックを横一列に並べたときの、各列の高さを表しています。ここで、このブロック形状が直線 y = x に対して対称であるかどうかを判定する必要があります。 たとえば、入力が nums = [7, 5, 3, 2, 2, 1, 1] の場合、出力は True になります。 解き方のアプローチ この問題は、リストの両端から同時に走査していくことで効率的に判定できます。手順は次のとおりです。 i を 0、j を「リストの長さ - 1」で初期化します。 i <= j である間、次の処理を繰り返します。 h := nums[j](右側の
-
Pythonでリストが空かどうかを判定するプログラム
Pythonでは、リストが空かどうかを簡単に判定できます。この記事では、空のリストが与えられたときに、それが空であるかどうかを確認する方法を紹介します。ポイントは、暗黙的(implicit)な判定方法を使うことです。Pythonでは、空のリストはブール値として「偽(False)」と評価されるため、if not を使うことで簡潔にチェックできます。 アルゴリズム ステップ1:空のリストを用意します。 ステップ2:リストが空であれば 1 を返し、そうでなければ 0 を返します。 サンプルコード # リストが空かどうかをチェックするPythonコード def checklist(A):