Pythonでのカスタム比較子を使用したソート方法


  1. リストの要素を直接比較する方法: 以下の例では、リスト内の数値を昇順にソートするカスタム比較子を定義しています。

    def custom_comparator(item):
       return item[0]  # リスト内の最初の要素で比較
    my_list = [[1, 'apple'], [3, 'banana'], [2, 'carrot']]
    sorted_list = sorted(my_list, key=custom_comparator)
    print(sorted_list)

    出力:

    [[1, 'apple'], [2, 'carrot'], [3, 'banana']]
  2. オブジェクトの属性を比較する方法: オブジェクトの属性を基準にソートする場合は、keyパラメータにラムダ関数を使用します。以下の例では、Personクラスのage属性でソートしています。

    class Person:
       def __init__(self, name, age):
           self.name = name
           self.age = age
    people = [
       Person('Alice', 25),
       Person('Bob', 30),
       Person('Charlie', 20)
    ]
    sorted_people = sorted(people, key=lambda x: x.age)
    for person in sorted_people:
       print(person.name, person.age)

    出力:

    Charlie 20
    Alice 25
    Bob 30
  3. 複数の基準でソートする方法: 複数の基準に基づいてソートする場合は、keyパラメータにタプルを返す関数を使用します。以下の例では、Personクラスのage属性とname属性の順にソートしています。

    sorted_people = sorted(people, key=lambda x: (x.age, x.name))

    ソートされた結果は、年齢が同じ場合に名前でソートされます。

これらはPythonでカスタム比較子を使用してソートするいくつかの一般的な方法です。ソートするデータの種類や要件に応じて、これらの例を参考にして適切な方法を選択してください。