0Pricing
Competitive Programming Academy · レッスン

sorted() と key 関数

数値、文字列、タプルをソートします

「sorted() と key 関数」はCoddyKit上の無料Competitive Programming Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはCompetitive Programming Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Competitive Programming Academyコースには全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チューター)、Competitive Programming Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Competitive Programming Academyコースには全4レッスンが含まれています。

「sorted() と key 関数」で何を学びますか?

数値、文字列、タプルをソートします ブラウザで直接実行するハンズオンコードでCompetitive Programming Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Competitive Programming Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのCompetitive Programming Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「sorted() と key 関数」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このCompetitive Programming Academyレッスンでコードを書いて実行できますか?

はい。すべてのCompetitive Programming Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. sorted() と key 関数
  2. 複数のフィールドでソートする
  3. functools.cmp_to_key によるカスタム順序
  4. 先にソートすると解決策が見つかる理由
← Competitive Programming Academyに戻る