3

我有一个对象列表,我想根据并行数组对它们进行排序。因此,当我对数据列表进行操作时,我构造了一个并行数组(该列表中的每个条目对应于原始列表中的一个条目)。然后(假设并行数组充满了数字)

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中做到这一点?

sort_a_by_b(list_a, list_b)

预期结果将是:

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

2 回答 2

6
>>> 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]
于 2013-07-12T15:19:55.787 回答
1

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

objects.sort(key=compute_sort_key_for_object)

compute_sort_key_for_object您将用于计算的函数sort_keys[i]在哪里objects[i]。它更快,更具可读性。

如果要计算的处理sort_keys更复杂,你会想要 Rohit 的答案:

import operator
[k for k, v in sorted(zip(objects, sort_keys), key=operator.itemgetter(1))]
于 2013-07-12T15:24:43.867 回答