Range data type or generator in Emacs Lisp (elisp)?

elisp, range

Solution

`number-sequence` is similar to python's `range` but its output is quite different. For example:

(number-sequence 5)
 => (5)
(number-sequence 1 5)
 => (1 2 3 4 5)
(number-sequence 1 5 2)
 => (1 3 5)

I use this function to give me an output like that from python's `range`:

(defun py-range (start &optional end step)
  (unless end
    (setq end start
      start 0))
  (number-sequence start (1- end) step))

Now everything works as expected:

(py-range 5)
 => (0 1 2 3 4)
(py-range 1 5)
 => (1 2 3 4)
(py-range 1 5 2)
 => (1 3)

Problem

What is elisp's equivalent for Python's `range(start, end, [step])`?

Original source