Я б сказав, що найпростішим рішенням є розпакування двох діапазонів у список за допомогою *оператора розпакування:
>>> [*range(6, 10), *range(-9, -5)]
[6, 7, 8, 9, -9, -8, -7, -6]
Це не лише найкоротший запропонований відповідь, але він також є найефективнішим, оскільки він лише створює єдиний список і не передбачає жодних викликів функцій за межами двох ranges.
Я перевірив це, перевіривши всі відповіді на це запитання за допомогою timeitмодуля:
Метод ідентифікатора відповіді timeit результат
-------------------------------------------------- ------------------------------------------------
(питання) [x для x у діапазоні (6,10)] + [y для y у діапазоні (-9, -5)] 0,843 Usec на цикл
(ця відповідь) [* діапазон (6, 10), * діапазон (-9, -5)] 0,509 Usec на цикл
61348876 [y для x у діапазоні (6,10) для y в (x, -x)] 0,754 Usec на цикл
61349149 список (range_with_negatives (6, 10)) 0,795 Usec на цикл
61348914 список (itertools.chain (діапазон (6, 10), діапазон (-9, -5))) 0,709 Usec за цикл
61366995 [знак * x для знака, x у itertools.product ((- 1, 1), діапазон (6, 10))] 0,899 Usec за цикл
61371302 список (діапазон (6, 10)) + список (діапазон (-9, -5)) 0,729 використання в циклі
61367180 список (range_with_negs (6, 10)) 1,95 Usec за цикл
(тестова перевірка, виконана з Python 3.6.9 на моєму комп’ютері (середні характеристики))