根据另一个列表对Python中的列表进行排序
在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