Python có một phương pháp range
, cho phép cho các công cụ như:Làm cách nào để thực hiện một `phạm vi nghịch đảo`, tức là tạo một phạm vi nhỏ gọn dựa trên một tập hợp các số?
>>> range(1, 6)
[1, 2, 3, 4, 5]
Những gì tôi đang tìm kiếm là loại ngược lại: mất một danh sách các số, và trở về điểm bắt đầu và kết thúc.
>>> magic([1, 2, 3, 4, 5])
[1, 5] # note: 5, not 6; this differs from `range()`
Đây là đủ dễ dàng để làm cho ví dụ trên, nhưng là nó có thể cho phép những khoảng trống hoặc nhiều dãy là tốt, trở về phạm vi trong một định dạng chuỗi PCRE-như thế nào? Something như thế này:
>>> magic([1, 2, 4, 5])
['1-2', '4-5']
>>> magic([1, 2, 3, 4, 5])
['1-5']
Edit: Tôi đang tìm kiếm một giải pháp Python, nhưng tôi chào đón ví dụ làm việc trong các ngôn ngữ khác là tốt. Tìm hiểu thêm về thuật toán hiệu quả, thanh lịch. Câu hỏi về tiền thưởng: có bất kỳ ngôn ngữ lập trình nào có phương pháp tích hợp cho điều này không?
Tôi có một nghi ngờ rằng không có cách nào tốt hơn là lặp qua danh sách, đó là dễ dàng để viết trên của riêng bạn. – trutheality
@trutheality Tôi cũng vậy, do đó câu hỏi này. Tôi hy vọng có một giải pháp _elegant_ mà tôi đang thiếu ở đây. Ngón tay vượt qua! –