根据另一个列表对Python中的列表进行排序

0 投票
1 回答
659 浏览
提问于 2025-04-18 08:59

在Python中,如何根据数组 #1来排序数组 #2呢?我的意思是,数组 #1是一个参考。

这个排序是基于我之前做的一些比较。可以把它当作一个参考:

数组 #1: [5, 1, 4, 3, 6, 2]

现在,数组 #2包含以下内容: [1, 2, 4, 5, 6]

我想知道如何将#2排序,使它变成: [5, 1, 4, 6, 2]

** 编辑 **:

数组 #2: 我们不能确定它的大小是否和#1一样,但它总是会和#1一样大或者更小。它总是数组 #1的一个子集。

1 个回答

3

看起来你想让 arr2 中的项目按照 arr1 中的顺序出现。所以,自然你会想要遍历 arr1,并选择那些在 arr2 中的项目。检查一个项目是否在另一个集合中,使用集合(set)会更高效。因此,首先计算出 set2,然后从 arr1 中选择那些在 set2 中的项目:

In [16]: set2 = set(arr2)

In [17]: [item for item in arr1 if item in set2]
Out[17]: [5, 1, 4, 6, 2]

根据评论,这里有一个 timeit 基准测试(使用 IPython),显示使用集合比使用列表要快:

In [20]: import random

In [21]: arr1 = range(20)

In [22]: random.shuffle(arr1)

In [23]: arr2 = random.sample(arr1, len(arr1)-1)

In [25]: %timeit set2 = set(arr2); [item for item in arr1 if item in set2]
100000 loops, best of 3: 2.13 µs per loop

In [26]: %timeit [item for item in arr1 if item in arr2]
100000 loops, best of 3: 4.49 µs per loop

撰写回答