Python でリストを別のリストで並べ替える

Shivam Arora 2023年1月30日
  1. zip() および sorted() 関数を使用して、Python の別のリストに基づいてリストを並べ替える
  2. NumPy モジュールを使用して、Python の別のリストに基づいてリストを並べ替える
  3. more_itertools.sort_together を使用して、Python の別のリストに基づいてリストを並べ替える
Python でリストを別のリストで並べ替える

通常、リストを並べ替えるときは、昇順または降順で並べ替えます。ただし、Python では別のリストの順序に基づいてリストを並べ替えることができます。

この記事では、別のリストの値に基づいて特定のリストを並べ替える方法を学習します。

zip() および sorted() 関数を使用して、Python の別のリストに基づいてリストを並べ替える

このメソッドでは、zip() 関数を使用して、指定された 2つのリストを組み合わせて 3 番目のオブジェクトを作成します。最初のリストは並べ替えが必要で、2 番目のオブジェクトは並べ替えに依存します。

次に、sorted() 関数を使用できます。この関数は、ソートおよび圧縮されたリストから、指定されたリストの各ペアの最初の要素を抽出します。

A = ["r", "s", "t", "u", "v", "w", "x", "y", "z"]
B = [0, 1, 1, 0, 1, 2, 2, 0, 1]
result_list = [i for _, i in sorted(zip(B, A))]
print(result_list)

出力:

['r', 'u', 'y', 's', 't', 'v', 'z', 'w', 'x']

NumPy モジュールを使用して、Python の別のリストに基づいてリストを並べ替える

この方法では、リストを NumPy 配列に変換してから、ソートアルゴリズムをリストに適用します。argsort() 関数を使用して、並べ替えが依存する配列を並べ替え、それらの値を使用して 2 番目の配列をフィルタリングします。

次の例を参照してください。

import numpy

A = ["r", "s", "t", "u", "v", "w", "x", "y", "z"]
B = [0, 1, 1, 0, 1, 2, 2, 0, 1]

A = numpy.array(A)
B = numpy.array(B)
inds = B.argsort()
sorted_a = A[B]
print(sorted_a)

出力:

['r' 's' 's' 'r' 's' 't' 't' 'r' 's']

リストの最終データを取得するには、tolist() 関数を使用します。

more_itertools.sort_together を使用して、Python の別のリストに基づいてリストを並べ替える

more_itertools モジュールは、itertools モジュールの拡張機能です。sort_together 関数は、並べ替えの優先順位として key_list 引数のリストを使用して、一緒に並べ替えられた入力イテラブルを返します。

例えば、

from more_itertools import sort_together

X = ["r", "s", "t", "u", "v", "w", "x", "y", "z"]
Y = [0, 1, 1, 0, 1, 2, 2, 0, 1]
s = sort_together([Y, X])[1]
print(list(s))

出力:

['r', 'u', 'y', 's', 't', 'v', 'z', 'w', 'x']

最終結果をリストとして取得するには、list() 関数を使用する必要があります。

関連記事 - Python List