python – Find all subranges of consecutive values in an array

I was looking at a dataset with a year column. I wanted all the years with matching a particular event. I then get a list of years which is not easy to read:

2010, 2011, 2012, 2013, 2015, 2017, 2018, 2019, 2020

It would be much better to display them as:

2010-2013, 2015, 2017-2020

I was looking for a builtin function in Python, but eventually, I wrote this:

import numpy as np

def ranges(array):
    start = None
    for i, k in zip(np.diff(array, append=(array(-1))), array):
        if i == 1:
            if start is None:
                start = k
        yield(k if start is None else (start, k))
        start = None

Is there a more pythonic way that does the same with less?

At the end I could do this:

years = (2010, 2011, 2012, 2013, 2015, 2017, 2018, 2019, 2020)
', '.join((f'{x(0)}-{x(1)}' if isinstance(x, tuple) else str(x)
    for x in ranges(years)))