В двух следующих спискахИспользование разрез`ать объединить числа в двух списках
l1 = [10, 33, 50, 67]
l2 = [7, 16, 29, 55]
цель состоит в том, чтобы объединить близкие номера в Словаре, и комбинации должны остановиться, как только он достигает последнего элемента в секунду список, так что в этом случае, если есть элементы не объединены в первом списке, эти элементы не будут рассматриваться, поэтому выход из вышеперечисленных списков будет
10 -> 7
33 -> 29
50 -> 55
67 ->--- # in this case because the last n. in the first list(55) is identified, so the n.67 will be zero
этот код дает следующий вывод
for s in l1:
ind = bisect(l2, s, hi=len(l2) - 1)
ind -= abs(l2[ind-1] - s) < l2[ind] - s
print("{} -> {}".format(s, l2[ind]))
выход
10 -> 7
33 -> 29
50 -> 55
67 -> 55 ### here is the error, so here will be: 67 -> --, because, 55 is identified in the previous items.
Заявление
if ind == len(l2) - 1:
break
дает этот выход
10 -> 7
33 -> 29
Может кто-то помочь?
'hi = len (l2) - 1' является избыточным, поскольку это значение по умолчанию для этого аргумента. –
У вас будет такая же проблема с '[10, 33, 34, 50]', только '33' и' 34' будут отображаться на '29'. Что должно произойти в этом случае? –
Вы уже сказали, как это решить; вы говорите, что * комбинация должна остановиться, как только она достигнет последнего элемента во втором списке *. Поэтому просто проверьте 'if ind == len (l2) - 1: break', чтобы закончить цикл. –