Это вопрос подсказки для игры в гольф на питоне .
В нескольких гольфах, которые я делал в Python, фиксированное значение присваивается одной из двух переменных, выбранных логическим значением. Выбранная переменная перезаписывается заданным значением, а другая неизменна.
17 символов:
if b:y=z
else:x=z
Назначить условное значение легко , но назначение условной переменной кажется неуклюжим. Мне интересно, есть ли более короткий путь, по которому я скучаю.
Это было бы легко, если бы x,y
вместо этого был список L
, но предположим, что контекст требует ссылки на переменные достаточно, чтобы писать L[0]
и L[1]
это непозволительно. Преобразование занимает слишком много времени:
20 символов:
L=[x,y];L[b]=z;x,y=L
Самый быстрый способ, который я знаю, это Python 2 exec
, который причудлив:
16 символов, Python 2:
exec"xy"[b]+"=z"
Выбор кортежа кажется длиннее:
18, 19, 18, 18 символов:
x,y=b*(x,z)or(z,y)
x,y=[z,x,y,z][b::2]
y,x=[y,z,x][b:b+2]
y,x,*_=[y,z,x][b:] # Python 3
Есть ли более короткий метод или оптимизация с сохранением символов? Вы можете предположить, b
является 0
или нет 1
, а не только Falsey или Truthy, а также делать предположения о типах данных и значениях, если это помогает.
x,y=C(x,y,z,b)
(14 символов) и вставить любую из этих реализаций в телоC
.