Баланс 2 набора значений элемент за элементом
Мой вопрос может показаться похожим на другие, но я пока не нашел ничего, что было бы близко к тому, что мне нужно (я все еще ищу в этом случае). У меня есть проект (подробности о проекте не нужны), когда я нахожу себя с конечным списком отрицательных значений и 2 другими конечными наборами положительных значений (числа с плавающей запятой). Возьмите примеры, приведенные ниже:
negative_values = [-0.246497, -0.341068]
positive_values_1 = [0.522148, 0.923764, 0.112573, 0.401668]
positive_values_2 = [0.281474]
Эти наборы могут варьироваться по размеру (от пустого до размера N). Что мне нужно сделать, это взять значения в первом положительном наборе и попытаться (может быть невозможно в зависимости от набора) создать значения в отрицательном наборе 0, сложив их вместе значение по значению.
Если это невозможно только с первым, тогда используйте второй набор, и если это все еще невозможно, тогда сделайте столько значений в 'absolute_values' 0, сколько возможно.
С вышеупомянутыми наборами это будет выглядеть примерно так:
def cancelOut(negative_values, positive_values_1, positive_values_2):
# Algorith doing something
new_negative_values = [0, 0]
new_positive_values_1 = [0, 0.858347, 0.112573, 0.401668]
new_positive_values_2 = [0.281474]
Произошло то, что первые значения в positive_values_1 сделали первое значение в absolute_value 0 и увеличили второе значение ближе к 0. Затем часть второго значения в positive_values_1 сделала второе значение в absolute_value 0, а затем алгоритм завершен. Я просто хочу добавить значения в положительных наборах к значениям в absolute_value по одному, пока все они не станут равными 0 или пока все наборы positive_value не станут равными 0.
Я не знаю, есть ли простой способ сделать это или мне нужно специально перебирать каждое установленное значение по значению и вычислять, что я хочу.
Спасибо всем заранее!
1 ответ
Вот с чего начать - это будет упражнение в логике и отслеживании вещей.
a = negative_values
b = positive_values_1
c = positive_values_2
Начните с первых пунктов a
а также b
,
add the a and b item together
if the result is > 0 change a's item to 0
and get a's next item to use in the next iteration
use the result for the b item in the next iteration
if the result is 0 change a and b's item to 0
and get the next items from a and b to use in the next iteration
if the result is < 0 change b's item to zero
and get b's next item for use in the next iteration
use the result for the a item in the next iteration
if you get a StopIteration for a you are done
make the current item/index of b (or c) = the result
if you get a StopIteration for b, switch to c
if you get a StopIteration for c you are done
make the current item/index of a = the result
repeat