【问题标题】:python sorting based on parallel arrays [duplicate]基于并行数组的python排序[重复]
【发布时间】:2013-07-11 04:37:27
【问题描述】:

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

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 )

【问题讨论】:

  • 顺便说一句,你所拥有的是元组,而不是列表或数组。

标签: python sorting


【解决方案1】:
>>> 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]

【讨论】:

  • 感谢您的帮助。
【解决方案2】:

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

objects.sort(key=compute_sort_key_for_object)

其中compute_sort_key_for_object 是用于从objects[i] 计算sort_keys[i] 的函数。它更快、更易读。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-24
    • 1970-01-01
    • 2018-05-01
    • 2019-04-25
    • 1970-01-01
    • 2020-08-10
    • 2016-03-27
    • 1970-01-01
    相关资源
    最近更新 更多