Баланс 2 набора значений элемент за элементом - PullRequest
0 голосов
/ 11 января 2019

мой вопрос может показаться похожим на другие, но я пока что не нашел ничего похожего на то, что мне нужно (я все еще ищу в этом случае). У меня есть проект (подробности о проекте не нужны), когда я нахожу себя с конечным списком отрицательных значений и 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 сделали первое значение в Positive_value 0 и увеличили второе значение ближе к 0. Затем часть второго значения в Positive_values_1 сделала второе значение в Positive_value 0, а затем алгоритм завершен , Я просто хочу добавить значения в положительных наборах к значениям в absolute_value по одному, пока все они не станут равными 0 или пока все наборы positive_value не будут равны 0.

Я не знаю, есть ли простой способ сделать это или мне нужно специально перебирать каждое установленное значение по значению и вычислять, что я хочу.

Заранее всем спасибо!

1 Ответ

0 голосов
/ 11 января 2019

Вот с чего начать - это будет упражнение в логике и отслеживании вещей.

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  
...