1. ホーム
  2. python

[解決済み] Pythonのカスタムリストソート

2022-10-27 19:24:13

質問

古いコードをリファクタリングしていたところ、このようなことに遭遇しました。

alist.sort(cmp_items)

def cmp_items(a, b):
    if a.foo > b.foo:
        return 1
    elif a.foo == b.foo:
        return 0
    else:
        return -1

このコードは動作します (そして私は3年ほど前にこれを書きました!) が、Pythonのドキュメントのどこにもこのことが書かれていませんし、誰もが sorted() を使ってカスタムソートを実装しています。なぜこれが動作するのか、誰か説明してくれますか?

どのように解決するのですか?

文書化されている はこちら .

<ブロッククオート

sort() メソッドは、比較を制御するためのオプションの引数を取ります。 比較を制御するためのオプションの引数を取ります。

cmpは2つの引数(リスト アイテム) の比較関数を指定します。 最初の引数が2番目の引数より小さいとみなされるか、等しいとみなされるか、または大きいとみなされるかどうかに応じて、負、ゼロ、または正の数を返す必要があります。 と等しいか、または2番目の引数より大きいとみなされるかどうかに応じて、負の数、ゼロまたは正の数を返す必要があります: cmp=lambda x,y: cmp(x.lower(), y.lower()). デフォルトはNoneです。