在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 的子集。
答案 0 :(得分:3)
您希望arr2
中的项目显示的顺序与arr1
中显示的顺序相同。因此,您希望迭代arr1
并选择arr2
成员的项目是很自然的。使用集合可以更有效地检查成员资格,因此首先计算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 benchmark(使用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