#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)