Python ha un metodo range
, che consente di cose come:Come fare un `intervallo` inverso, cioè creare un intervallo compatto basato su un insieme di numeri?
>>> range(1, 6)
[1, 2, 3, 4, 5]
Quello che sto cercando è una specie di l'opposto: prendere una lista di numeri, e restituire l'inizio e la fine.
>>> magic([1, 2, 3, 4, 5])
[1, 5] # note: 5, not 6; this differs from `range()`
Questo è abbastanza facile da fare per l'esempio precedente, ma è possibile consentire lacune o più intervalli così, tornando la gamma in un formato stringa di PCRE-like? Qualcosa di simile a questo:
>>> magic([1, 2, 4, 5])
['1-2', '4-5']
>>> magic([1, 2, 3, 4, 5])
['1-5']
Edit: sto cercando una soluzione Python, ma il benvenuto esempi di lavoro in altre lingue. Si tratta di capire un algoritmo elegante ed efficiente. Domanda bonus: esiste un linguaggio di programmazione che abbia un metodo integrato per questo?
Ho il sospetto che non c'è modo migliore che scorrendo l'elenco, che è facile da scrivere da soli. – trutheality
@trutheality Anch'io, quindi questa domanda. Spero che ci sia una soluzione elegante che mi manca qui. Dita incrociate! –