基于并行数组的python排序

python sorting based on parallel arrays

本问题已经有最佳答案,请猛点这里访问。

我有一个对象列表,我想基于一个并行数组对它们进行排序。所以,当我在一个数据列表上操作时,我构建了一个并行数组(列表中的每个条目对应于原始列表中的一个条目)。那么(假设并行数组中充满了数字)

1
2
list_a = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9 )
list_b = (4, 2, 5, 6, 1, 7, 3, 9, 0, 8 )

我想根据平行数组的值对原始对象列表进行排序,以便原始列表按升序按另一个数组中的数值进行排序。有什么方法可以在python中实现这一点吗?

1
sort_a_by_b(list_a, list_b)

预期结果为:

1
list_a_sorted_by_b = (8, 4, 1, 6, 0, 2, 3, 5, 9, 7 )


1
2
3
4
5
6
7
>>> list_a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> list_b = [4, 2, 5, 6, 1, 7, 3, 9, 0, 8]
>>>
>>> import operator
>>>
>>> [k for k, v in sorted(zip(list_a, list_b), key=operator.itemgetter(1))]
[8, 4, 1, 6, 0, 2, 3, 5, 9, 7]


调用对象列表objects和其他列表sort_keys。如果只从objects[i]的值计算sort_keys[i],甚至不需要构建sort_keys。你应该这样做:

1
objects.sort(key=compute_sort_key_for_object)

其中,compute_sort_key_for_object是用于从objects[i]计算sort_keys[i]的函数。它速度更快,可读性更强。

如果计算EDOCX1[1]的过程更复杂,您需要Rohit的答案:

1
2
import operator
[k for k, v in sorted(zip(objects, sort_keys), key=operator.itemgetter(1))]