Python max、min、sortedのkeyを指定したリストの操作

max()、min()、sorted()はそれぞれ最大値と最小値、並べ替えたリストを返す関数ですが、これらの関数はkeyに別の関数を指定してその返り値に従った操作を行うことができます。 例えば、文字列のリストの最大や最小を文字数を基準に求めたいとします。その場合は文字数を求める関数len()を使い、次のように応用します。


max()の場合

len(“apple”)、len(“orange”)、len(“kiwi”)はそれぞれ5、6、4であるため、max()の場合は”orange”が6で最大なので”orange”が返されます。

list = ["apple", "orange", "kiwi"]

print max(list, key=len)
#=> orange


min()、sorted()

同じようにmin()の場合は最も文字数が少ない”kiwi”、sorted()の場合は文字数の少ない順に並べ替えたリストが返されます。

list = ["apple", "orange", "kiwi"]

print min(list, key=len)
#=> kiwi

print sorted(list, key=len)
#=> ['kiwi', 'apple', 'orange']


その他の活用法

もちろんkeyには他の関数や独自に実装した関数も指定可能です。下記のコードのmax()ではリスト内の数値の合計を求めるsum()の返り値が最大である[5, 8]、min()では3で割った余りが最小の6が返ることになります。

#coding: utf-8

list1 = [[3, 7], [5, 8], [2, 9]]

#リスト内の数値の合計が最大
print max(list1, key=sum)
#=> [5, 8]

def modulo3(x):
    return x % 3

list2 = [6, 7, 11]

#3で割った余りが最小
print min(list2, key=modulo3)
#=> 6