10
$\begingroup$

If I have a list

list={3,7,4,5,1}

how to get the List of Intervals /Ranges

result = {{1,3},{3,4},{4,5},{5,7}}
$\endgroup$
18
$\begingroup$

Maybe

Partition[Sort@list, 2, 1]

giving

{{1, 3}, {3, 4}, {4, 5}, {5, 7}}

$\endgroup$
  • $\begingroup$ Beat me to it - 7 secs! Deleting mine, and +1. $\endgroup$ – Leonid Shifrin Jan 21 '12 at 9:30
7
$\begingroup$

Tom's answer is canonical, but you could also use:

With[{s = Sort[list]}, Transpose[{Most[s], Rest[s]}]]

which seems to be marginally faster for large lists. (In which case most of the time is spent sorting.)

$\endgroup$
  • 2
    $\begingroup$ Alternatively: Composition[Transpose, Through, {Most, Rest}, Sort][list]. $\endgroup$ – J. M. will be back soon Jan 22 '12 at 4:26

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.