Esta é uma pergunta de dicas para jogar golfe em python .
Em vários campos de golfe que fiz em Python, um valor fixo é atribuído a uma das duas variáveis escolhidas por um booleano. A variável escolhida é substituída pelo valor fornecido e a outra é inalterada.
17 caracteres:
if b:y=z
else:x=z
É fácil atribuir um valor condicional , mas atribuir a uma variável condicional parece desajeitado. Eu estou querendo saber se há uma maneira mais curta que eu estou perdendo.
Isso seria fácil se x,y
fosse uma lista L
, mas suponha que o contexto exija referência suficiente às variáveis que a escrita L[0]
e L[1]
é proibitiva. A conversão leva muito tempo:
20 caracteres:
L=[x,y];L[b]=z;x,y=L
A maneira mais rápida que conheço é com um Python 2 exec
, que é bizarro:
16 caracteres, Python 2:
exec"xy"[b]+"=z"
A escolha da tupla parece ser mais longa:
18, 19, 18, 18 caracteres:
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
Existe algum método mais curto ou otimização para salvar caracteres? Você pode assumir que b
é 0
ou 1
não apenas Falsey ou Truthy, e também fazer suposições sobre os tipos e valores de dados, se isso ajudar.
x,y=C(x,y,z,b)
(14 caracteres) e inserir qualquer uma dessas implementações no corpo doC
.