一つの質問に答えると、私は、より良い方法で行うことができたはずの迂回法であると私が信じる問題に行き着きましたが、私は無知でした
2つのリストがあります
percent = [0.23, 0.27, 0.4, 0.1]
optimal_partition = [3, 2, 2, 1]
optimal_partitionは、数値8を4つの部分に分割する整数分割の1つです。
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]