Powiedziałbym, że najprostszym rozwiązaniem jest rozpakowanie dwóch zakresów na listę za pomocą *operatora rozpakowywania:
>>> [*range(6, 10), *range(-9, -5)]
[6, 7, 8, 9, -9, -8, -7, -6]
Jest to nie tylko najkrótsza jak dotąd zaproponowana odpowiedź, ale także najbardziej wydajna, ponieważ tworzy ona tylko jedną listę i nie wymaga żadnych wywołań funkcji poza tymi dwoma range.
Zweryfikowałem to, testując wszystkie odpowiedzi na to pytanie za pomocą timeitmodułu:
Identyfikator odpowiedzi Metoda timeit wynik
-------------------------------------------------- ------------------------------------------------
(w pytaniu) [x dla xw zakresie (6,10)] + [y dla yw zakresie (-9, -5)] 0,843 usec na pętlę
(ta odpowiedź) [* zakres (6, 10), * zakres (-9, -5)] 0,509 usec na pętlę
61348876 [y dla xw zakresie (6,10) dla yw (x, -x)] 0,754 usec na pętlę
61349149 lista (zakres_z ujemnymi (6, 10)) 0,795 usec na pętlę
61348914 lista (itertools.chain (zakres (6, 10), zakres (-9, -5))) 0,709 usec na pętlę
61366995 [znak * x dla znaku, x w itertools.product ((- 1, 1), zakres (6, 10))] 0,899 usec na pętlę
61371302 lista (zakres (6, 10)) + lista (zakres (-9, -5)) 0,729 usec na pętlę
61367180 list (range_with_negs (6, 10)) 1,95 usec na pętlę
(testy czasu przeprowadzane za pomocą Pythona 3.6.9 na moim komputerze (średnie specyfikacje))