問題の背景:
Pythonは初めからコレクションをソートするための組み込みツールを提供していました。sort()メソッドとsorted()関数はPythonの第2版で登場しましたが、Python 2.4からは、sorted()が任意の反復可能オブジェクトをソートするための汎用手段として導入されました(リストだけでなく)。
問題:
データを異なる基準でソートする必要がある場合が多く、常に元のオブジェクトを変更したくないことがあります。初心者はsort()とsorted()を混同し、各々の使用場所を理解せず、ソートキーや逆順での誤りを犯すことがあります。
解決策:
sorted(反復可能オブジェクト, key=None, reverse=False)は常に新しいリストオブジェクトを返し、元のものを変更しません。list.sort(key=None, reverse=False)はリストをその場でソートし、Noneを返します。keyパラメータは、どの基準でソートするかを決定する関数です。reverse=Trueは順序を逆にします。文字列のリストをその長さで逆順にソートする例:
words = ['python', 'is', 'strong', 'language'] sorted_words = sorted(words, key=len, reverse=True) print(sorted_words) # ['language', 'python', 'strong', 'is']
主な特徴:
sort()メソッドは何を返しますか?
list.sort()メソッドはリストをソートし、常にNoneを返すことが、しばしば忘れられます。
lst = [3, 1, 2] res = lst.sort() print(res) # None print(lst) # [1, 2, 3]
sort()を使用してタプルをソートできますか?
できません。タプルは不変であり、.sort()メソッドはありません。ソートするにはsorted()を使用してください。
tuple_data = (5,2,3) sorted_tuple = sorted(tuple_data) print(sorted_tuple) # [2, 3, 5]
keyに異なる型を返す関数を指定したらどうなりますか?
返される値が互いに比較できない場合(例えば、intとstr)、TypeErrorが発生します。
面接で長さでソートされたリストを返すように求められ、候補者が次のようにします:
lst = ['one', 'elephant'] ans = lst.sort(key=len) print(ans) # None
利点:
欠点:
正しい使用:
lst = ['one', 'elephant'] ans = sorted(lst, key=len) print(ans) # ['one', 'elephant']
利点:
欠点: