Це питання поради щодо гольфу в пітон .
У кількох гольфах, які я робив у 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
, не лише Фальсі або Труті, а також робити припущення щодо типів даних і значень, якщо це допомагає.
x,y=C(x,y,z,b)
(14 символів) і натиснути будь-яку з цих реалізацій в тілоC
.