Если бы ваши два списка были одинаковой длины, вы могли бы использовать Thread для объединения аргументов. Затем вы можете написать функцию для проверки каждой пары, чтобы решить, что с ними делать. Это будет работать нормально, за исключением того, что вы не хотите изменять два аргумента, если первые элементы не совпадают. Чтобы решить эту проблему, вы можете использовать трюк с последовательностью.
b1={{1,2},{3,4},{4,5},{9,3}}; b2={{1,7},{3,6},{8,5},{9,7}};
f[{a_,b_},{c_,d_}]:=If[a==c,{a,b+d},Sequence@@{{a,b},{c,d}}];
Thread[f[b1,b2]]
Все, что возвращает
{{1,9},{3,10},{4,5},{8,5},{9,10}}
Это точно верно для каждой пары списков одинаковой длины?
НО вы отредактировали свой вопрос, чтобы разрешить списки неравной длины. Thread не будет работать с этим. Но, возможно, вы можете написать функцию, которая будет использоваться поверх этого. Он проверит, равны ли длины списков, если да, то сделайте то, что было показано, если нет, то обрежьте более длинный список, используйте то, что было показано, и, наконец, добавьте дополнительный элемент из более длинного списка.
Вы можете придумать, как это сделать?