Python
 Computer >> コンピューター >  >> プログラミング >> Python

【Python】元のリストを変更せずに逆順・ソートする方法|reversed()とsorted()の使い方

Pythonで数値のリストを扱う際、「リストを逆順にしたい」「並べ替え(ソート)をしたい」という場面はよくあります。しかし、ここでは元のリスト自体は変更しないことを前提とします。

リストにはreverse()メソッドやsort()メソッドが用意されていますが、これらを使うとリストはその場で(in-placeで)書き換えられてしまいます。元の順序を保持したまま新しい結果を得るには、代わりに組み込み関数のreversed()sorted()を使用します。

たとえば、入力が l = [2,5,8,6,3,4,7,9] の場合、出力は次のようになります。

[9, 7, 4, 3, 6, 8, 5, 2]
[2, 3, 4, 5, 6, 7, 8, 9]

reverse()・sort()とreversed()・sorted()の違い

両者の違いを整理しておきましょう。

  • reverse():リストのメソッド。呼び出したリストそのものを逆順に書き換え、戻り値はNone
  • reversed():組み込み関数。元のリストを変更せず、逆順に走査するイテレータを返す。list()で囲むことで新しいリストとして取得できる。
  • sort():リストのメソッド。呼び出したリストそのものを昇順に並べ替える。
  • sorted():組み込み関数。元のリストを変更せず、並べ替えた新しいリストを返す。

解き方の手順

この問題は、以下の手順で解きます。

  • rev := reversed()関数が返すイテレータをlist()で新しいリストに変換する
  • rev を表示する
  • srt := sorted()関数を使ってリスト l をソートした結果を取得する
  • srt を表示する

サンプルコード

理解を深めるために、次の実装例を確認してみましょう。

def solve(l):
   rev = list(reversed(l))
   print(rev)

   srt = sorted(l)
   print(srt)

l = [2,5,8,6,3,4,7,9]
solve(l)

入力

[2,5,8,6,3,4,7,9]

出力

[9, 7, 4, 3, 6, 8, 5, 2]
[2, 3, 4, 5, 6, 7, 8, 9]

ポイントまとめ

元のリストを壊したくない場合は、reverse()sort()ではなく、list(reversed(l))sorted(l)を使うのが安全です。どちらも元のリストを一切変更せず、新しいリストとして結果を受け取れるため、同じデータを別の用途で再利用したい場合に特に便利です。

  1. Pythonで学ぶ選択ソートの基本原理と実装方法をわかりやすく解説

    本記事では、選択ソート(Selection Sort)の基本的な仕組みと、Python 3.xでの実装方法について詳しく解説します。 選択ソートとは? 選択ソートは、ソートされていない部分から最小値の要素を繰り返し見つけ出し、それを先頭に移動させることで配列全体を整列していくアルゴリズムです。処理の過程では、与えられた配列が次の2つの部分配列に分けられます。 すでにソートが完了している部分配列 まだソートされていない部分配列 選択ソートの各イテレーション(反復処理)では、未ソート部分から最小要素を取り出し、ソート済み部分の末尾に挿入していきます。この操作を繰り返すことで、最終的に配列全体

  2. 文中の各単語を逆順に並べ替えるPythonプログラムの書き方

    この記事では、Pythonの組み込み関数を使って、文の中の各単語を逆順にする方法を解説します。処理の流れはシンプルで、まず文を単語のリストに分割し、次に各単語を反転させて新しいリストを作成し(ここではリスト内包表記を活用)、最後にそのリストを結合して新しい文を生成します。 実行例 入力 :: PYTHON PROGRAM 出力 :: NOHTYP MARGORP アルゴリズム ステップ1 : 文を入力し、変数 s に格納する。 ステップ2 : 文を単語のリストに分割する。 w = s.split( ) ステップ3 : 各単語を反転させ、新しい単語リスト nw を作成する。 ステップ