Это вопрос подсказки для игры в гольф на питоне .
В нескольких гольфах, которые я делал в 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.