Более короткий способ инкремента min или max значения
Очень часто бывает так, что нужно добавить 1 к минимальному значению, или отнять 1 от максимального. Яркий пример этому - два указателя, которые двигаются друг к другу.
Возьмём как пример ситуацию:
# Инициализируем два указателя и будем их постепенно двигать друг к другу
heights = [1, 8, 6, 2, 5, 4, 8, 3, 7]
left = 0
right = len(height) - 1
while left < right:
if heights[left] > heights[right]:
right -= 1
else:
left += 1
В цикле while
логика += 1 и -= 1 реализована на 4 строчках, почему мы не можем сделать например так?
min(left, right) += 1
max(left, right) -= 1
Ведь если мы посмотрим на адрес в памяти у этих переменных, то увидим что у left
(минимального значения) и функции min
от левого и правого указателя одинаковые адреса
print(hex(id(left))) -> 0x956e00 (одинак)
print(hex(id(right))) -> 0x956e20
print(hex(id(min(left, right)))) -> 0x956e00 (одинак)
Что должно в теории разрешать подобные операции во втором блоке с кодом.
Есть ли более короткие альтернативы, которые делают тоже самое, но занимают меньше строк или может быстрее работают?