我有一个元组列表。每个元组由另一个元组和一个索引组成。我想根据内部元组的值之间的差异对列表进行排序。 或者,用另一种表示法:
[((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
,但我并没有把它当作不仅仅用简单查找排序的东西。 “排序”列表遍布整个地方,似乎是随机的。
由于概率表可能变得很大,我希望我的解决方案不会复制任何值,这就是为什么这是一个如此复杂的单行。如果有人知道如何用发电机做几行,我也会很高兴。
答案 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)]