Элегантный способ увеличить x, если x 0 в python?

#python-3.x

#python-3.x

Вопрос:

У меня есть значение, которое находится между -5 и 5, и мне нужно сместить его в сторону 0 с шагом 1. Есть ли элегантный способ сделать это, не прибегая к операторам if и elif?

Ответ №1:

 x  = (x < 0) * 2 - 1
  

Это должно сработать. Конечно, это слишком умно, и никто этого не поймет, вам гораздо лучше использовать if инструкцию.

Это работает, потому что (x < 0) создает логический результат, а логические значения могут заменять целые числа на False = 0 и True = 1.

Если вам нужно обработать случай, когда x = 0, вообще не меняя, это простая модификация:

 x  = (x < 0) * 2 - (x != 0)
  

Если вы на самом деле не пытаетесь полностью избежать if , то Pythonic способ был бы:

 x  = 1 if x < 0 else -1
  

Комментарии:

1. Вы также могли бы использовать x = -1**(x>0)

2. @DavidFaber это StackOverflow, а не CodeGolf.

Ответ №2:

Этого должно быть достаточно:

 x  = 1 if x < 0 else -1
  

Ответ №3:

В Python нет функции signum, но вместо нее есть copysign , что является следующей лучшей вещью:

 import math
math.copysign(abs(x)-1, x)