Tôi muốn nói rằng giải pháp đơn giản nhất là giải nén hai phạm vi vào danh sách bằng cách sử dụng *toán tử giải nén:
>>> [*range(6, 10), *range(-9, -5)]
[6, 7, 8, 9, -9, -8, -7, -6]
Đây không chỉ là câu trả lời ngắn nhất được đề xuất mà còn là câu trả lời hiệu quả nhất, bởi vì nó chỉ xây dựng một danh sách duy nhất và không liên quan đến các cuộc gọi chức năng ngoài hai ranges.
Tôi đã xác minh điều này bằng cách kiểm tra tất cả các câu trả lời của câu hỏi này bằng timeitmô-đun:
Trả lời ID Phương pháp kết quả thời gian
-------------------------------------------------- ------------------------------------------------
(trong câu hỏi) [x cho x trong phạm vi (6,10)] + [y cho y trong phạm vi (-9, -5)] 0,843 usec mỗi vòng
(câu trả lời này) [* phạm vi (6, 10), * phạm vi (-9, -5)] 0,509 usec mỗi vòng lặp
61348876 [y cho x trong phạm vi (6,10) cho y trong (x, -x)] 0,754 usec mỗi vòng lặp
Danh sách 61349149 (phạm vi_with_negative (6, 10)) 0,795 usec mỗi vòng lặp
Danh sách 61336114 (itertools.chain (phạm vi (6, 10), phạm vi (-9, -5))) 0.709 usec mỗi vòng lặp
61366995 [ký * x cho dấu, x trong itertools.product ((- 1, 1), phạm vi (6, 10))] 0.899 usec mỗi vòng
Danh sách 61371302 (phạm vi (6, 10)) + danh sách (phạm vi (-9, -5)) 0,729 usec mỗi vòng lặp
Danh sách 61367180 (phạm vi_with_negs (6, 10)) 1,95 usec mỗi vòng lặp
(kiểm tra thời gian thực hiện với Python 3.6.9 trên máy tính của riêng tôi (thông số kỹ thuật trung bình))