【python】listのソートはsorted関数が便利です

python

pythonのlistをsortする方法を調べる人

pythonのlistをsortする方法を調べる人
「pythonでlistをsortしたいのですが、どのように記述すればいいでしょう。そもそもlistってどのようなデータを入れられましたっけ?あと具体的な例として、コピペできるソースコードも欲しいです。」

こんな疑問を解決します。

本記事の内容

  • 1.pythonにおけるlistとは
  • 2.listをsortする
  • 3.好きな順序に並べ替える

この記事を書いている私はIT業界歴12年、年収1,000万円ちょっとの金融系エンジニアです。学生時代から様々なプログラミング言語を扱ってきましたが、その中でもpythonはとても扱いやすく生産性も高く、オススメの言語です。

本記事では、細かい構文に迷ったら、例からコピー&ペーストして使えることも目指しました。少しでもお役に立てますと幸いです。

1.pythonにおけるlistとは

pythonにおけるlistとは

listとは、pythonにおける基本的なデータ構造の一つ。要素を一列に並べて管理します。中身は文字列でも整数でも混在していても問題ありません。

listの種類(整数list,文字列list,混在したlist)

>>> #整数のlist
>>> [2, 4, 5, 3, 1]
[2, 4, 5, 3, 1]

>>> #文字列のlist
>>> ['c', 'b', 'a']
['c', 'b', 'a']

>>> #整数と文字列の混在list
>>> [1, 'x']
[1, 'x']

>>> #整数リストのリスト
>>> [[9,9],[1,9,1],[2,5],[3,0]]
[[9, 9], [1, 9, 1], [2, 5], [3, 0]]

2.listをsortする

listをsortする

sorted関数を用いてリストをソートします。

>>> #整数のリストを大きさ順に並べる
>>> sorted([2, 4, 5, 3, 1])
[1, 2, 3, 4, 5]

>>> #文字列リストを辞書順に並べる
>>> sorted(['cookie', 'box', 'apple'])
['apple', 'box', 'cookie']

>>> #文字列リストを辞書の逆順に並べる
>>> sorted(['cookie', 'box', 'apple'],reverse=True)
['cookie', 'box', 'apple']

 

整数と文字列の混在リストにsorted()を使うとエラーになります

>>> #整数と文字列の混在リストにソートするとエラーになる
>>> sorted(['x',1])
Traceback (most recent call last):
  File "", line 1, in 
TypeError: '<' not supported between instances of 'str' and 'int'

sorted関数は定められた順序によって並び替えを行いますが、文字列型と整数型では順序のルールが異なるため、比較できずにエラーとなってしまいます。
 

sorted()を使うとlist以外のデータもソートできます

>>> #tupleのソート
>>> sorted((5,1,3))
[1, 3, 5]
 
>>> #文字列を文字のリストと見なしてソートする
>>> sorted('Hello,world')
[',', 'H', 'd', 'e', 'l', 'l', 'l', 'o', 'o', 'r', 'w']

3.好きな順序に並べ替える

好きな順序に並べ替える

数値と文字列が混在するケースでも、文字列とみなして並び替えをすればエラーになりません。sortedの引数でkey=strを指定します。

>>> #整数と文字列の混在リストの各要素にstr関数を適用し、文字列として辞書順に並び替える
>>> sorted(['x',1],key=str)
[1, 'x']

他の順序で並び替えます。

>>> #絶対値の大きさ順に並べる
>>> sorted([-2,-1,0,1,2],key=abs) 
[0, -1, 1, -2, 2]

>>> #文字の長さ順に並べる
>>> sorted(['cookie', 'box', 'apple'],key=len)
['box', 'apple', 'cookie']

>>> #各リストの合計値の大きさ順に並べる
>>> sorted([[9,9],[1,9,1],[2,5],[3,0]],key=sum)
[[3, 0], [2, 5], [1, 9, 1], [9, 9]]

>>> #各リストの最初の要素の大きさ順に並べ替える
>>> sorted([[9,9],[1,9,1],[2,5],[3,0]],key=lambda x:x[0])
[[1, 9, 1], [2, 5], [3, 0], [9, 9]]

>>> #各リストの2番目の要素の大きさ順の逆順に並べ替える
>>> sorted([[9,9],[1,9,1],[2,5],[3,0]],key=lambda x:x[1]*-1)
[[9, 9], [1, 9, 1], [2, 5], [3, 0]]

なお、lambda式については次の記事を参照ください。
参考:【python】ラムダ式(lambda)を完全マスターする

今回は以上です。pythonでlistをソートする方法について紹介しました。参考になりますと幸いです。