Мой подход заключается в объединении двух массивов, сортировке объединенного массива, а затем итерации по объединенному массиву для вычисления количества недель между соседними датами.Затем вы можете проверить большую из двух соседних дат, чтобы увидеть, из какого исходного списка он получен, и вернуть отрицательное значение, если оно пришло из списка true_sl.
Обратите внимание, что я выбрал сортировку объединенных списков.Предполагается, что даты в списках true_sh и true_sl всегда будут чередоваться.
Вот код:
from datetime import datetime
true_sh = [datetime(2012, 1, 8), datetime(2012, 4, 22), datetime(2012, 8, 19), datetime(2012, 10, 7)]
true_sl = [datetime(2011, 11, 20), datetime(2012, 3, 25), datetime(2012, 5, 13), datetime(2012, 9, 2)]
out_array = true_sh
out_array.extend(true_sl)
out_array.sort()
for i, elem in enumerate(out_array):
if i == 0:
continue
num_days = elem - out_array[i - 1]
num_weeks = num_days.days // 7
if elem in true_sl:
num_weeks = -num_weeks
print(num_weeks)
А вот вывод:
7
-11
4
-3
14
-2
5
Обратите внимание, чтоВы дали ожидаемый 2-й результат как -10, но между 8 января 2012 года и 25 марта 2012 года есть 77 дней, поэтому я считаю, что вывод здесь -11 является правильным.Можете ли вы подтвердить, пожалуйста?