对复杂数据结构进行排序

时间:2015-02-02 16:29:50

标签: python sorting

我有一个元组列表。每个元组由另一个元组和一个索引组成。我想根据内部元组的值之间的差异对列表进行排序。 或者,用另一种表示法:

[((float, float), int), ...]

我想在排序键中使用这两个浮点数。

我写了这个:

from math import fabs

def sort_for_avg(probabilities):  # 'probabilites' is a list of float-pairs
    return sorted(zip(probabilites, range(len(probabilites))),
                  key=lambda entry: fabs(entry[0][0]-entry[0][1]))

我尝试过使用itemgetter,但我并没有把它当作不仅仅用简单查找排序的东西。 “排序”列表遍布整个地方,似乎是随机的。

由于概率表可能变得很大,我希望我的解决方案不会复制任何值,这就是为什么这是一个如此复杂的单行。如果有人知道如何用发电机做几行,我也会很高兴。

1 个答案:

答案 0 :(得分:3)

示例数据:

probabilities = [((1.0,2.0),3),((3.0,1.0),1),((0.5,1.0),2)]

要进行排序:

probabilities.sort(key=lambda x: abs(x[0][0]-x[0][1]))

输出:

>>> probabilities
[((0.5, 1.0), 2), ((1.0, 2.0), 3), ((3.0, 1.0), 1)]

或者返回一个新的排序列表:

sorted_probabilities = sorted(probabilities, key=lambda x: abs(x[0][0]-x[0][1]))

输出:

>>> sorted_probabilities
[((0.5, 1.0), 2), ((1.0, 2.0), 3), ((3.0, 1.0), 1)]