Pythonでリストがソート済みかどうかを確認する2つの方法
Pythonにおいて、リストは最も広く使われているデータコレクションの一つです。開発の現場では、与えられたリストがすでに昇順にソートされているかどうかを確認したい場面によく出会います。この記事では、その判定を行うための代表的なアプローチを2つ、サンプルコード付きで紹介します。
方法1:sort()メソッドを使う
まず元のリストのコピーを作成し、そのコピーに対してsort()メソッドを適用します。その後、ソート済みのコピーと元のリストを比較し、両者が完全に一致していれば「元のリストはすでにソートされている」と判断できます。
サンプルコード
listA = [11,23,42,51,67]
# 与えられたリスト
print("Given list : ",listA)
listA_copy = listA[:]
# コピーにソートを適用
listA_copy.sort()
if (listA == listA_copy):
print("Yes, List is sorted.")
else:
print("No, List is not sorted.")
# 別のリストでも確認
listB = [11,23,21,51,67]
# 与えられたリスト
print("Given list : ",listB)
listB_copy = listB[:]
# コピーにソートを適用
listB_copy.sort()
if (listB == listB_copy):
print("Yes, List is sorted.")
else:
print("No, List is not sorted.")
実行結果
上記のコードを実行すると、次のような出力が得られます。
Given list : [11, 23, 42, 51, 67] Yes, List is sorted. Given list : [11, 23, 21, 51, 67] No, List is not sorted.
方法2:all()関数とrange()関数を使う
もう一つの方法は、all()関数を利用するものです。「リスト内のすべての要素が、隣り合う次の要素以下である」という条件を一括で検証でき、range()関数と組み合わせることでリスト全体を順番に走査します。
サンプルコード
listA = [11,23,42,51,67]
# 与えられたリスト
print("Given list : ",listA)
# all()とrange()を適用
if (all(listA[i] <= listA[i + 1] for i in range(len(listA)-1))):
print("Yes, List is sorted.")
else:
print("No, List is not sorted.")
# 別のリストでも確認
listB = [11,23,21,51,67]
print("Given list : ",listB)
# all()とrange()を適用
if (all(listB[i] <= listB[i + 1] for i in range(len(listB)-1))):
print("Yes, List is sorted.")
else:
print("No, List is not sorted.")
実行結果
上記のコードを実行すると、次のような出力が得られます。
Given list : [11, 23, 42, 51, 67] Yes, List is sorted. Given list : [11, 23, 21, 51, 67] No, List is not sorted.
どちらの方法を選ぶべきか?
sort()メソッドを使う方法は直感的で理解しやすい反面、リストのコピーを作成してソートする必要があるため、要素数が多いリストでは計算コストがO(n log n)にかかり、やや非効率です。
一方、all()とrange()を組み合わせる方法は、隣接する要素同士を1回ずつ比較するだけなので計算量はO(n)で済み、大きなリストでも高速に動作します。また、元のリストを一切変更しないため、安全面でも優れています。
実務では、パフォーマンスと安全性の観点から、後者のall()を使った方法が推奨されることが多いです。
-
Pythonでリストが空かどうかを判定するプログラム
Pythonでは、リストが空かどうかを簡単に判定できます。この記事では、空のリストが与えられたときに、それが空であるかどうかを確認する方法を紹介します。ポイントは、暗黙的(implicit)な判定方法を使うことです。Pythonでは、空のリストはブール値として「偽(False)」と評価されるため、if not を使うことで簡潔にチェックできます。 アルゴリズム ステップ1:空のリストを用意します。 ステップ2:リストが空であれば 1 を返し、そうでなければ 0 を返します。 サンプルコード # リストが空かどうかをチェックするPythonコード def checklist(A):
-
Pythonでリストをソートする方法をわかりやすく解説
Pythonのsortメソッドを使ったリストの並べ替えPythonでは、リストに対してsort()メソッドを呼び出すことで、要素を昇順に並べ替えることができます。内部的には、各クラスが持つ比較演算子(__gt__や__lt__)が使われており、文字列や数値などの組み込み型はあらかじめこれらが実装されているため、特別な設定なしに自動的にソートされた結果を得られます。実際の使用例を見てみましょう。words = [Hello, World, Foo, Bar, Nope] numbers = [100, 12, 52, 354, 25] words.sort() numbers.sort() p