calendarcodediamondfacebookfingerglobalgoogleplushatenahomepagetopplainpocketrssservicetwitterwordpresshome2searchfoldernext-arrowback-arrowfirst-arrowlast-arrow

Python : sorted() は、イテラブル要素を並び替える関数である

sort()は元のリストをソートするメソッドに対し、sorted() は、常に新しいオブジェクトで返す関数である。

エンジニア速報は Twitter の@commteで 1 日 5 回配信しています。

Sponsored Link

sorted() のポイント

  • iterable の要素を並べ替えた新たなリストを返す
  • 結果は常に新しいオブジェクトで返される
  • 引数に不変な型も受け取ることができる
  • 戻り値は常にリストである
  • 文字と整数が混在するとエラーになるので引数に無名関数を使う
sorted(iterable, *, key=None, reverse=False)

sorted() - 組み込み関数 — Python 3.9.4 ドキュメント

sorted 関数 と sort メソッド の違い

リストをソートする場合、以下の 2 通りの方法がある。

  • 組み込み関数 sorted 関数
  • リスト自身が持つ sort メソッド

sort()は元のリストをソートするメソッドに対し、sorted() は、常に新しいオブジェクトで返す関数。

# sorted() sorted(list型変数) # sort() list型変数.sort()

違いを比較してみる。sort()は元のリストも破壊的に変更されてしまうが、sorted()は元のリストは変更されない。

sort()

sort()によって元のリストは変更されてしまう。

# sort() x = [8, 2, 7, 6, 1] print(x) # 元のリストも破壊的に変更された # [1, 2, 6, 7, 8]

sort()自体は None を返す。

x = [4, 2, 1, 5, 3] y = x.sort() print(y) # None print(x) # [1, 2, 3, 4, 5]

sorted()

sorted()は元のリストは変更されない。

# sorted() s = [8, 2, 7, 6, 1] print(sorted(s)) # [1, 2, 6, 7, 8] print(s) # 元のリストは変更されない # [8, 2, 7, 6, 1]

絶対値で並べ替える

sorted()を使う場合、リストにマイナスが入ると、マイナス順に ソート されてしまう。絶対値でソートしたいときは、第二引数に key 引数を設定する。

sorted(イテラブル, key=abs)

マイナス値が入っている整数を並べ替えてみよう。

# リストにマイナスが入ると、マイナス順にソートされる x = [1, -2, 3, -4] x.sort() print(x) # [-4, -2, 1, 3] # 絶対値でソートしたいときは、key引数を使う y = [1, -2, 3, -4] print(sorted(y, key=abs)) # [1, -2, 3, -4]

文字と整数をソート

文字と整数が混在するときは、エラーになるので、引数 key に無名関数を指定する。以下は lambda を key に入れている例。ソートされるときに、lambda に渡されるため、比較に利用する値を返す。

x = ['1', 2, '3', 4] sorted(x, key=lambda v: int(v)) # sorted(リスト, 名前=lambda 引数: 式) # ['1', 2, '3', 4]

逆順にソートする

逆順にソートしたいときは、reverse=True を使う。

x = [1, 3, 9, 2] sorted(x, reverse=True) # [9, 3, 2, 1]

大文字と小文字を区別せずにソートする

関数を指定することもできる。key に関数 str.lower を指定すると要素が小文字に変換された後に、ソート結果が出力される。

x = ['d', 'B', 'a', 'c'] print(sorted(x)) # ['B', 'a', 'c', 'd'] y = ['d', 'B', 'a', 'c'] print(sorted(y, key=str.lower)) # ['a', 'B', 'c', 'd']

Python おすすめ本

スポンサード リンク

Comments

Leave a Comment

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください