sorted関数にて、reverse=Trueとしないでリスト内の整数を降順にソートする方法を説明します。
基準となる列の正と負を反転したものを基準に昇順にソートすることで、結果的に基準となる列で降順にソートすることができます。処理は下記です。
sorted(リスト, key=lambda x:-x)
コードは下記です。
様々なリストを降順にソートし、「reverse=True」とする場合と「ソートの基準となる列の符号を反転した場合」の結果を出力しています。どちらも同じ結果になっていることがわかります。
#0, 正の整数、負の整数 l = [5, 3, 1, -4, -2, 0] print(sorted(l, reverse=True)) print(sorted(l, key=lambda x:-x)) """出力 [5, 3, 1, 0, -2, -4] [5, 3, 1, 0, -2, -4] """ #0, 正の整数 l = [5, 3, 1, 4, 2, 0] print(sorted(l, reverse=True)) print(sorted(l, key=lambda x:-x)) """出力 [5, 4, 3, 2, 1, 0] [5, 4, 3, 2, 1, 0] """ #0, 負の整数 l = [-5, -3, -1, -4, -2, 0] print(sorted(l, reverse=True)) print(sorted(l, key=lambda x:-x)) """出力 [0, -1, -2, -3, -4, -5] [0, -1, -2, -3, -4, -5] """
本方法のメリットは段階的にソートする時に、1行のコードで任意の列を降順にソートできることです。下記コードでは血液型→体重の優先度で、血液型は昇順、体重は降順にソートしています。
段階的なソートについては下記をご確認ください。
python 段階的なソート | Hello, Pygineer (knuth256.com)
human = [ #名前 , 血液型, 体重 ('tadasi', 'O', 50 ), ('kiyosi', 'O', 100 ), ('masasi', 'A', 70 ), ] s1 = sorted(human, key=lambda x:(x[1], -x[2])) print(*s1, sep="\n") """出力 ('masasi', 'A', 70) ('kiyosi', 'O', 100) ('tadasi', 'O', 50) """
sorted関数にて、reverse=Trueとして任意の列のみを降順にソートする場合、複数回sorted関数をコールする必要があります。
human = [ #名前 , 血液型, 体重 ('tadasi', 'O', 50 ), ('kiyosi', 'O', 100 ), ('masasi', 'A', 70 ), ] s1 = sorted(human, key=lambda x: x[2], reverse=True) print(*s1, sep="\n") """出力 ('kiyosi', 'O', 100) ('masasi', 'A', 70) ('tadasi', 'O', 50) """ s1 = sorted(s1, key=lambda x: x[1]) print(*s1, sep="\n") """出力 ('masasi', 'A', 70) ('kiyosi', 'O', 100) ('tadasi', 'O', 50) """
コメント