#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])