回答一个问题,我最终遇到了一个问题,我认为这是一种迂回的解决方法,可以以更好的方式完成,但我一无所知
有两个列表
percent = [0.23, 0.27, 0.4, 0.1]
optimal_partition = [3, 2, 2, 1]
最佳分区,是数字 8 分成 4 部分的整数分区之一
我想以一种optimal_partition
将百分比分布匹配到尽可能接近的方式进行排序,这意味着单个分区应尽可能匹配百分比幅度
所以和和3 -> 0.4
_2 -> 0.27
0.23
1 -> 0.1
所以最终的结果应该是
[2, 2, 3, 1]
我最终解决这个问题的方法是
>>> percent = [0.23, 0.27, 0.4, 0.1]
>>> optimal_partition = [3, 2, 2, 1]
>>> optimal_partition_percent = zip(sorted(optimal_partition),
sorted(enumerate(percent),
key = itemgetter(1)))
>>> optimal_partition = [e for e, _ in sorted(optimal_partition_percent,
key = lambda e: e[1][0])]
>>> optimal_partition
[2, 2, 3, 1]
你能建议一个更简单的方法来解决这个问题吗?
更简单的意思是,无需实现多重排序,以及基于索引的存储和稍后重新排列。
还有几个例子:
percent = [0.25, 0.25, 0.4, 0.1]
optimal_partition = [3, 2, 2, 1]
result = [2, 2, 3, 1]
percent = [0.2, 0.2, 0.4, 0.2]
optimal_partition = [3, 2, 2, 1]
result = [1, 2, 3, 2]