Как разделить список целых чисел на два отдельных списка с примерно одинаковым средним значением? -Python

#python #list #integer

#python #Список #целое число

Вопрос:

У меня есть список:

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

И я хочу разделить его на два списка. Два списка должны иметь одинаковое среднее значение. Как бы я это сделал?

Комментарии:

1. Проверьте это: geeksforgeeks.org /…

2. Должны ли они быть как можно ближе к одному и тому же среднему значению? Или это достаточно хорошо, чтобы быть в пределах определенного порога или диапазона?

Ответ №1:

Вы могли бы

  • вычислить весь mean
  • попробуйте все разные комбинации всех размеров, пока не найдете тот, который в среднем составляет половину от общего числа в пределах дельта-ошибки
  • получить неподтвержденные значения
  • у вас есть 2 части со средними значениями, почти равными
  • return None — решение не найдено с заданной ошибкой delta
 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])