備忘録

【Python】Pythonでソートする方法

前提

Python: 3.12

Pythonにおけるソートの基礎: sort() vs sorted()

Pythonでソートを行うには、主にsort()sorted()の2つの関数が利用できる。

sort()関数: リストを直接変更する

sort()関数は、リストに直接変更を加えてソートを行う。この関数は、元のリストを破壊的に変更するため、ソート後のリストが必要な場合は注意が必要だ。

numbers = [3, 1, 4, 2]
numbers.sort()
print(numbers)  # 出力: [1, 2, 3, 4]

sorted()関数: 新しいリストを作成する

sorted()関数は、元のリストを変更せずに、ソートされた新しいリストを返す。元のリストを保持したい場合に便利だ。

numbers = [3, 1, 4, 2]
sorted_numbers = sorted(numbers)
print(sorted_numbers)  # 出力: [1, 2, 3, 4]
print(numbers)  # 出力: [3, 1, 4, 2]

ソートをカスタマイズする: keyreverse

sort()関数とsorted()関数は、keyreverseという2つの引数を受け取り、ソート動作をカスタマイズすることができる。

key: ソート基準を指定する

key引数は、ソートの基準となる関数を指定する。デフォルトでは、要素自体が比較対象となるが、key引数を使用することで、要素の特定の属性や計算結果に基づいてソートすることができる。

words = ['apple', 'banana', 'cherry']
words.sort(key=len)  # 文字列の長さでソート
print(words)  # 出力: ['apple', 'cherry', 'banana']

reverse: 昇順/降順を切り替える

reverse引数は、ソート順を反転させる。デフォルトはFalseで昇順、Trueを指定することで降順になる。

numbers = [3, 1, 4, 2]
numbers.sort(reverse=True)  # 降順にソート
print(numbers)  # 出力: [4, 3, 2, 1]

高度なソートテクニック: lambda式とタプル

より複雑なソート条件を実現するために、lambda式やタプルを活用することができる。

lambda式: 無名関数で簡潔に記述

lambda式を使うと、関数をその場で定義することができる。key引数と組み合わせて、簡潔な記述でソート条件を指定できる。

students = [
    {'name': 'Alice', 'age': 20},
    {'name': 'Bob', 'age': 18},
    {'name': 'Charlie', 'age': 22},
]
students.sort(key=lambda x: x['age'])  # 年齢でソート
print(students)

タプル: 複数条件でのソート

タプルを使うと、複数の条件でソートを行うことができる。Pythonは、タプルの要素を順番に比較していくため、第一条件で同じ値を持つ要素は、第二条件で比較される。

products = [
    ('Apple', 100),
    ('Banana', 50),
    ('Cherry', 100),
]
products.sort(key=lambda x: (x[1], x[0]))  # 価格でソート、同じ場合は名前でソート
print(products)

関連記事

  • 【Python】入力を受け付ける方法 input()関数の使い方
    前提 Python: 3.12 input()関数の基本的な使い方 input()関数の基本的な使い方は非常にシンプルだ。関数を呼び出すだけで、プログラムの実行が一時
  • 【Python】importの仕方
    前提 Python: 3.12 1. importの基本 まずは、importの基本的な使い方について確認しよう。 Pythonでは、以下のように記述することでモジュールを
  • 【Python】pipの使い方
    前提 Python: 3.12 pipとは? Pythonパッケージ管理の強い味方 pipは、Package Installer for Pythonの略称であり、Pythonのパッケージをイン
  • 【Jinja2】for文の中で使えるloopについて
    前提 Python: 3.12 Jinja2: 3.1.3 参考 List of Control Structures — Template Designer Documentation — Jinja Documentation (3.1.x) Jinja2のloop変数とは Jinja2のloop変数は、for文などのループ処理内で自動的に生成
  • 【Python】文字列メソッドの使い方
    前提 Python: 3.12 参考 文字列メソッド — 組み込み型 — Python 3.12.3 ドキュメント Pythonの文字列メソッド Pythonを使いこなす上で、文字列処理は避けて通れない