如何将整数列表拆分为两个具有相同平均值的独立列表? -Python

How to split an integer list into two separate lists that are around the same average? -Python

我有一个列表:

numbers = [1, 10, 15, 16, 64, 100, 0, 0, 0, 3]

我想把它分成两个列表。这两个列表需要具有相似的平均值。我该怎么做?

你可以

  • 计算整体mean
  • 尝试所有尺寸的所有不同组合,直到您发现其中一个平均值是总尺寸的一半,并且在误差范围内
  • 获取未使用的值
  • 你得到的 2 个部分的均值几乎相等
  • return None 未找到具有给定错误增量的解决方案
def main(values, delta=0.1):
    m = mean(values)
    for i in range(1, len(values)):
        for c in combinations(values, r=i):
            i_mean = mean(c)
            if abs(i_mean - m / 2) < delta:
                other_part = [v for v in values if v not in c]
                return c, other_part
    return None

演示

numbers = [1, 10, 15, 16, 64, 100, 0, 0, 0, 3]
print(main(numbers, 1))      # ([10], [1, 15, 16, 64, 100, 0, 0, 0, 3])
print(main(numbers, 0.1))    # ([1, 10, 15, 16], [64, 100, 0, 0, 0, 3])
print(main(numbers, 0.01))   # None
print(main(numbers, 0.001))  # None

print(main([1, 2, 3, 4, 5, 6, 7, 8, 9], 0.00001))  # ([1, 4], [2, 3, 5, 6, 7, 8, 9])