1

Python 3 より前は、ユーザー定義オブジェクトをリストに挿入するために bisect を使用していました。__cmp__私のユーザー定義オブジェクトには、オブジェクトを比較する方法を定義する定義があったため、bisect はこれに満足していました。Python 3 で cmp をサポートしない理由を読みましたが、それで問題ありません。古いコードの修正は、ユーザー定義オブジェクトをタプルに変換して「装飾」することだと思いました

(integer, user-defined object).

ただし、タプルのリストがあり、試してみると...

i = bisect_left([list_of_tuples], (integer, user-defined object))

次に、「builtins.TypeError: unorderable types ...」というエラーが表示されます

では、(python 3 で)自然な並べ替え順序で完全に構成されていないアイテムのリストに bisect を使用するにはどうすればよいですか?

4

1 に答える 1

16

__lt__メソッドを追加する必要があります。これは、代わりに比較に使用されるものになりました__cmp__

于 2010-11-15T22:37:01.003 に答える