Direi che la soluzione più semplice è decomprimere due intervalli in un elenco utilizzando l' *operatore di decompressione:
>>> [*range(6, 10), *range(-9, -5)]
[6, 7, 8, 9, -9, -8, -7, -6]
Non solo questa è la risposta più breve ancora proposta, è anche la più performante, perché costruisce solo un singolo elenco e non comporta chiamate di funzioni oltre le due ranges.
Ho verificato questo testando tutte le risposte a questa domanda utilizzando il timeitmodulo:
ID risposta Metodo timeit risultato
-------------------------------------------------- ------------------------------------------------
(in questione) [x per x nell'intervallo (6,10)] + [y per y nell'intervallo (-9, -5)] 0,843 usec per loop
(questa risposta) [* range (6, 10), * range (-9, -5)] 0,509 usec per loop
61348876 [y per x in range (6,10) per y in (x, -x)] 0,754 usec per loop
61349149 list (range_with_negatives (6, 10)) 0,795 usec per loop
61348914 list (itertools.chain (range (6, 10), range (-9, -5))) 0.709 usec per loop
61366995 [segno * x per segno, x in itertools.product ((- 1, 1), intervallo (6, 10))] 0,899 usec per loop
61371302 elenco (intervallo (6, 10)) + elenco (intervallo (-9, -5)) 0,729 usec per loop
61367180 list (range_with_negs (6, 10)) 1,95 usec per loop
(test di timeit eseguiti con Python 3.6.9 sul mio computer (specifiche medie))