回答一个问题时,我遇到了一个问题,我认为这是一种绕弯子的解决方法,可能有更好的方法,但我毫无头绪。
有两个列表
percent = [0.23, 0.27, 0.4, 0.1]
optimal_partition = [3, 2, 2, 1]
optimal_partition是将数字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]