Python のリスト (list) - 要素の並べ替え
ここでは Python のリスト (list) の要素を並べ替える方法についてご説明します。
sort() メソッドでリストの要素を並べ替える
Python のリストの要素を並べ替えるには、sort() メソッドを使います。
例えば、以下のような names リストの要素をアルファベット順に並べるには、次のようにします。
names = [ "Tanaka", "Suzuki", "Sato", "Yamada"]
print(names)
names.sort()
print(names)
実行結果は次のようになります。names リストの中の名前の順番が、アルファベット順にソートされていますね。
['Tanaka', 'Suzuki', 'Sato', 'Yamada']
['Sato', 'Suzuki', 'Tanaka', 'Yamada']
アルファベットの降順にしたい時は、sort(reverse=True) とすることで、先ほどの反対の順番になります。
names = [ "Tanaka", "Suzuki", "Sato", "Yamada"]
print(names)
names.sort(reverse=True)
print(names)
実行結果は次のようになり、アルファベットの降順になっていますね。
['Tanaka', 'Suzuki', 'Sato', 'Yamada']
['Yamada', 'Tanaka', 'Suzuki', 'Sato']
並べ替え用の関数を指定してリストの要素を並べ替える
先ほど「アルファベット順」と書きましたが、大文字の A-Z が先にきて、小文字の a-z が後にきます。
大文字と小文字が規則性なく混ざっている場合、期待した結果と違う、ということになるかもしれません。
次のようなリストを sort() メソッドで並べ替えてみましょう。
names = [ "Tanaka", "Suzuki", "Sato", "akiyama", "Yamada"]
print(names)
names.sort()
print(names)
実行結果は次のようになり、akiyama が一番最後にきていますね。
['Tanaka', 'Suzuki', 'Sato', 'akiyama', 'Yamada']
['Sato', 'Suzuki', 'Tanaka', 'Yamada', 'akiyama']
sort() メソッドには、「key=関数」という形で並び替えに使う関数を指定することができます。
大文字小文字を無視して、アルファベット順に並べたい時には、sort(key=str.casefold) とすれば、大文字小文字を無視してアルファベット順に並べ替えることができます。
names = [ "Tanaka", "Suzuki", "Sato", "akiyama", "Yamada"]
print(names)
names.sort(key=str.casefold)
print(names)
実行結果は次のようになり、akiyama が一番最初にきています。
['Tanaka', 'Suzuki', 'Sato', 'akiyama', 'Yamada']
['akiyama', 'Sato', 'Suzuki', 'Tanaka', 'Yamada']
今回は、並び替えに使う関数に str クラスの casefold というメソッドを指定しましたが、自分で定義した関数でも大丈夫です。
sorted() 関数で 要素が並び替えられたリストを取得する
sort() メソッドを使うと、リスト内の要素の並び順を変更することができました。
その変更は永久的なもので、並べ替えてしまうと、元の並び順がどうだったかはもうわかりません。
時には、元のリストはそのままで、並び順が変わったリストを取得したいことがあるかもしれません。
そんな時は、sorted() 関数を使うことで、要素が並び替えられた新しいリストを取得することができます。
names = [ "Tanaka", "Suzuki", "Sato", "Yamada"]
names_sorted = sorted(names)
print(names)
print(names_sorted)
実行結果は次のようになり、names_sorted に要素が並べ替えられたリストが代入されていますね。
['Tanaka', 'Suzuki', 'Sato', 'Yamada']
['Sato', 'Suzuki', 'Tanaka', 'Yamada']
reverse() メソッドで要素の並び順を反対にする
Python のリストの要素の並び順を単純に今の反対にしたい時は reverse() メソッドを使います。
names = [ "Tanaka", "Suzuki", "Sato", "Yamada"]
print(names)
names.reverse()
print(names)
実行結果は次のようになり、要素の順番が反対になっていますね。
['Tanaka', 'Suzuki', 'Sato', 'Yamada']
['Yamada', 'Sato', 'Suzuki', 'Tanaka']
以上、Python のリスト (list) の要素を並べ替える方法についてご説明しました。