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

时间:2014-06-07 18:15:21

标签: python arrays algorithm sorting

在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 个答案:

答案 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