Eu tenho o seguinte código:
new_index = index + offset
if new_index < 0:
new_index = 0
if new_index >= len(mylist):
new_index = len(mylist) - 1
return mylist[new_index]
Basicamente, calculo um novo índice e o uso para encontrar algum elemento de uma lista. Para ter certeza de que o índice está dentro dos limites da lista, precisei escrever essas 2 if
instruções espalhadas em 4 linhas. Isso é bastante prolixo, um pouco feio ... Atrevo-me a dizer, é bastante antipitônico .
Existe alguma outra solução mais simples e compacta? (e mais pítônico )
Sim, eu sei que posso usar if else
em uma linha, mas não é legível:
new_index = 0 if new_index < 0 else len(mylist) - 1 if new_index >= len(mylist) else new_index
Eu também sei que posso acorrentar max()
e ficar min()
junto. É mais compacto, mas acho meio obscuro, mais difícil de achar bugs se eu digitar errado. Em outras palavras, não acho muito simples.
new_index = max(0, min(new_index, len(mylist)-1))