python で sort と lambda

pythonでsort

参考:【Python】ソート

昇順に並び替える


alphabets = ['A', 'B', 'D', 'C']
numbers = [1, 2, 4, 3]

alphabets.sort()
print(alphabets)
# ['A', 'B', 'C', 'D']

numbers.sort()
print(numbers)
# [1, 2, 3, 4]

降順に並び替える


alphabets = ['A', 'B', 'D', 'C']
numbers = [1, 2, 4, 3]

alphabets.sort(reverse=True)
print(alphabets)
# ['D', 'C', 'B', 'A']

numbers.sort(reverse=True)
print(numbers)
# [4, 3, 2, 1]

逆順に並び替える


alphabets = ['A', 'B', 'D', 'C']
numbers = [1, 2, 4, 3]

alphabets.reverse()
print(alphabets)
# ['C', 'D', 'B', 'A']

numbers.reverse()
print(numbers)
# [3, 4, 2, 1]

多次元を並び替える


mixed_list = [['a', 6], ['c', 1], ['a', 2], ['b', 5], ['b', 3], ['c', 4]]

mixed_list.sort(key=lambda x:x[1])
print(mixed_list)
# 数値でソートをする。
# [['c', 1], ['a', 2], ['b', 3], ['c', 4], ['b', 5], ['a', 6]]

mixed_list.sort(key=lambda x:x[0])
print(mixed_list)
# 更にアルファベットでソートをする。
# [['a', 2], ['a', 6], ['b', 3], ['b', 5], ['c', 1], ['c', 4]]

# ※アルファべットのみでソートした場合は下記の通り数値は無視される。
# [['a', 6], ['a', 2], ['b', 5], ['b', 3], ['c', 1], ['c', 4]]

上記を一回でソートする


mixed_list = [['a', 6], ['c', 1], ['a', 2], ['b', 5], ['b', 3], ['c', 4]]

mixed_list.sort(key=lambda x:(x[0], x[1]))
print(mixed_list)
# [['a', 2], ['a', 6], ['b', 3], ['b', 5], ['c', 1], ['c', 4]]

上記をitemgetterでソートする


from operator import itemgetter

mixed_list = [['a', 6], ['c', 1], ['a', 2], ['b', 5], ['b', 3], ['c', 4]]

mixed_list.sort(key=itemgetter(0,1))
print(mixed_list)
# [['a', 2], ['a', 6], ['b', 3], ['b', 5], ['c', 1], ['c', 4]]