在 Python 中按另一个列表对列表进行排序

Shivam Arora 2023年1月30日 2021年10月2日
  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() 函数对排序所依赖的数组进行排序,然后使用这些值来过滤第二个数组。

请参考以下示例。

A = ["r", "s", "t", "u", "v", "w", "x", "y", "z"]
B = [ 0,   1,   1,    0,   1,   2,   2,   0,   1]
import numpy
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