在 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() 函式通過組合兩個給定的列表來建立第三個物件,第一個必須排序,第二個依賴於排序。

然後我們可以使用 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() 函式對排序所依賴的陣列進行排序,然後使用這些值來過濾第二個陣列。

請參考以下示例。

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