Ce n'est pas une "tranche", mais c'est une solution générale qui n'utilise pas d'indexation explicite, et qui fonctionne pour le scénario où la séquence en question est anonyme (vous pouvez donc créer et "trancher" sur la même ligne, sans créer deux fois et indexer deux fois) : operator.itemgetter
import operator
# Done once and reused
first_and_last = operator.itemgetter(0, -1)
...
first, last = first_and_last(some_list)
Vous pourriez simplement le mettre en ligne comme (après from operator import itemgetter
pour des raisons de brièveté au moment de l'utilisation) :
first, last = itemgetter(0, -1)(some_list)
mais si vous êtes amené à réutiliser souvent le getter, vous pouvez vous épargner le travail de le recréer (et lui donner un nom utile et auto-documenté) en le créant une fois à l'avance.
Ainsi, pour votre cas d'utilisation spécifique, vous pouvez remplacer :
x, y = a.split("-")[0], a.split("-")[-1]
avec :
x, y = itemgetter(0, -1)(a.split("-"))
y split
une seule fois sans stocker l'ensemble des list
dans un nom persistant pour len
vérification ou double indexation ou autre.
Notez que itemgetter
pour plusieurs éléments renvoie un tuple
et non un list
Donc, si vous ne vous contentez pas de le décompresser vers des noms spécifiques, et que vous avez besoin d'un véritable list
vous devrez envelopper l'appel dans la balise list
constructeur.