Saya akan mengatakan solusi paling sederhana adalah membongkar dua rentang ke dalam daftar menggunakan *operator membongkar:
>>> [*range(6, 10), *range(-9, -5)]
[6, 7, 8, 9, -9, -8, -7, -6]
Tidak hanya ini jawaban terpendek yang diajukan, tetapi juga yang paling berkinerja, karena hanya membangun satu daftar dan tidak melibatkan pemanggilan fungsi selain keduanya. range .
Saya memverifikasi ini dengan menguji semua jawaban pertanyaan ini menggunakan timeit modul:
Jawaban ID Metode timeit hasilnya
-------------------------------------------------- ------------------------------------------------
(dalam pertanyaan) [x untuk x dalam kisaran (6,10)] + [y untuk y dalam kisaran (-9, -5)] 0,843 usec per loop
(jawaban ini) [* range (6, 10), * range (-9, -5)] 0,509 usec per loop
61348876 [y untuk x dalam kisaran (6,10) untuk y dalam (x, -x)] 0,754 usec per loop
61349149 daftar (range_with_negatives (6, 10)) 0,795 usec per loop
61348914 daftar (itertools.chain (kisaran (6, 10), kisaran (-9, -5))) 0,709 usec per loop
61366995 [tanda * x untuk tanda, x di itertools.product ((- 1, 1), range (6, 10))] 0,899 usec per loop
61371302 daftar (kisaran (6, 10)) + daftar (kisaran (-9, -5)) 0,729 usec per loop
61367180 daftar (range_with_negs (6, 10)) 1.95 usec per loop
(pengujian timeit dilakukan dengan Python 3.6.9 di komputer saya sendiri (spesifikasi rata-rata))