1. ホーム
  2. python

[解決済み] Python 3 でカスタム比較関数を使用するには?

2022-08-29 10:29:57

質問

質問 Python 2.x で、sortedと.sort関数にカスタム関数を渡すことができました。

>>> x=['kar','htar','har','ar']
>>>
>>> sorted(x)
['ar', 'har', 'htar', 'kar']
>>> 
>>> sorted(x,cmp=customsort)
['kar', 'htar', 'har', 'ar']

なぜなら 私の 言語では、コンポーネントはこの順序で来ます。

"k","kh",....,"ht",..."h",...,"a"

しかし Python 3.x を渡すことができなかったようです。 cmp キーワード

>>> sorted(x,cmp=customsort)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'cmp' is an invalid keyword argument for this function

何か代替案があるのでしょうか、それとも自分でソート関数も書いた方がいいのでしょうか?

注:"k", "kh" などで簡略化しています。実際の文字はUnicodesで、さらに複雑で、子音の前後に母音が来ることもありますが、カスタム比較関数を作ったので、その部分は大丈夫です。ただ、問題は、私のカスタム比較関数をsortedまたは.sortに渡すことができなかったことです。

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

を使用します。 key 引数を使用します (そして レシピ をどのように変換するかについては、古い cmp 関数から key 関数に変換します)。

functools は、関数 cmp_to_key で述べた docs.python.org/3.6/library/functools.html#functools.cmp_to_key で言及されています。