Je dirais que la solution la plus simple consiste à déballer deux plages dans une liste à l'aide de l' *opérateur de déballage:
>>> [*range(6, 10), *range(-9, -5)]
[6, 7, 8, 9, -9, -8, -7, -6]
Non seulement c'est la réponse la plus courte proposée à ce jour, mais c'est aussi la plus performante, car elle ne construit qu'une seule liste et n'implique aucun appel de fonction au-delà des deux. range s.
J'ai vérifié cela en testant toutes les réponses à cette question en utilisant le timeit module:
Answer ID Method timeit result
-------------------------------------------------- ------------------------------------------------
(en question) [x pour x dans la plage (6,10)] + [y pour y dans la plage (-9, -5)] 0,843 usec par boucle
(cette réponse) [* plage (6, 10), * plage (-9, -5)] 0,509 usec par boucle
61348876 [y pour x dans la plage (6,10) pour y dans (x, -x)] 0,754 usec par boucle
61349149 liste (range_with_negatives (6, 10)) 0,795 usec par boucle
61348914 liste (itertools.chain (plage (6, 10), plage (-9, -5))) 0,709 usec par boucle
61366995 [signe * x pour signe, x dans itertools.product ((- 1, 1), range (6, 10))] 0,899 usec par boucle
61371302 liste (plage (6, 10)) + liste (plage (-9, -5)) 0,729 usec par boucle
Liste 61367180 (range_with_negs (6, 10)) 1,95 usec par boucle
(test de timeit effectué avec Python 3.6.9 sur mon propre ordinateur (spécifications moyennes))