sorted() と key 関数
数値、文字列、タプルをソートします
「sorted() と key 関数」はCoddyKit上の無料Coding Interview Prepレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはCoding Interview Prep学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Coding Interview Prepコースには全4レッスンが含まれています。
ソートで競技に勝つ
データが順序どおりに並ぶと、多くの競技プログラミングの問題は簡単になります。最初に使うツールは、新しい順序付きリストを返すsorted()です。🏆
sorted() はコピーを返す
sorted(nums)を呼び出しても元のリストは変更されず、新しいソート済みリストが返されます。後で入力を使う必要がある場合に便利です。
nums = [3, 1, 2]
print(sorted(nums)) # [1, 2, 3]
print(nums) # [3, 1, 2]list.sort() はその場でソートする
元の順序が不要なら、list.sort()はリストをその場でソートし、None を返します。大きな配列でメモリを節約できます。
nums = [3, 1, 2]
nums.sort()
print(nums) # [1, 2, 3]デフォルトは昇順
Python はデフォルトで、小さいものから大きいものの順にソートします。数値は小さい順に、文字列は 1 文字ずつ辞書順に並びます。
print(sorted(["pear", "apple", "kiwi"]))
# ['apple', 'kiwi', 'pear']reverse で逆順にする
reverse=Trueを渡すと、大きいものから小さいものの順にソートできます。貪欲法で大きな要素から処理したい場合に最適です。
print(sorted([3, 1, 2], reverse=True))
# [3, 2, 1]key 関数を使う
key引数によって、各要素をどの基準で順位付けするかを sort に伝えられます。Python はすべての要素に対して key を呼び出し、その戻り値で並べ替えます。
words = ["bb", "a", "ccc"]
print(sorted(words, key=len))
# ['a', 'bb', 'ccc']lambda と key
小さなlambdaを使えば、任意の式をその場で指定してソートできます。ここでは、数値の 0 からの距離で並べます。
vals = [-5, 2, -1, 3]
print(sorted(vals, key=lambda x: abs(x)))
# [-1, 2, 3, -5]フィールドでオブジェクトをソートする
タプルやレコードでは、重要なフィールドをkeyに指定します。要素の残りの部分は、そのまま一緒に扱われます。
people = [("Ann", 30), ("Bob", 25)]
print(sorted(people, key=lambda p: p[1]))
# [('Bob', 25), ('Ann', 30)]ソートは安定している
Python のソートは安定しています。同じ key の要素は元の相対的な順序を保ちます。そのため、安全に複数回ソートして同順位を処理できます。
手作業の比較より key
keyは要素ごとに 1 回だけ計算されるため、大きな入力でも高速です。自分で要素を入れ替える代わりに key を使ってください。
ソートの計算量は O(n log n)
Python のソートはO(n log n)時間で実行されます。n が数十万程度までなら、1 秒制限にも十分収まります。
確認問題
リストを並べ替える必要がありますが、元のリストはそのまま残さなければなりません。
まとめ
sorted()でデータを並べ替えることも、その場でソートすることもできます。reverse で逆順にし、key を使えば任意の基準で順位付けできます。安定ソートにより同順位も整然と処理されます。🎉
よくある質問
「sorted() と key 関数」レッスンは無料ですか?
はい。「sorted() と key 関数」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Coding Interview Prepコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Coding Interview Prepコースには全4レッスンが含まれています。
「sorted() と key 関数」で何を学びますか?
数値、文字列、タプルをソートします ブラウザで直接実行するハンズオンコードでCoding Interview Prepを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Coding Interview Prepを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのCoding Interview Prepは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「sorted() と key 関数」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このCoding Interview Prepレッスンでコードを書いて実行できますか?
はい。すべてのCoding Interview Prepレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- sorted() と key 関数
- 複数のフィールドでソートする
- functools.cmp_to_key によるカスタム順序
- 先にソートすると解決策が見つかる理由