如何将整数列表拆分为两个具有相同平均值的独立列表? -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])
我有一个列表:
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])