k is the scalar gain coefficient and is never an array that I've seen, like ` tf2zpk([1,2,3],[4,5,6])` -> `(array([-1.+1.4142j, -1.-1.4142j]), array([-0.625+1.0533j, -0.625-1.0533j]), 0.25)`.

z and p are always returned as arrays by things like `tf2zpk`, and expected to be arrays by things like `scipy.signal.lti`, but these prototype functions sometimes produce empty lists instead of empty arrays:

    In [190]: ellipap(1, 1, 20)
    Out[190]: ([], -1.9652267283602716, 1.9652267283602716)

    In [191]: ellipap(2, 1, 20)
    Out[191]: 
    (array([ 0.+3.2056j,  0.-3.2056j]),
     array([-0.5148-0.9424j, -0.5148+0.9424j]),
     0.10000792473475931)

so `zpk2tf(*ellipap(1, 1, 20))` and `zpk2tf(*ellipap(2, 1, 20))` and `lti(*ellipap(2, 1, 20))` all work, but `lti(*ellipap(1, 1, 20))` doesn't.  I think everything should consistently output z and p as arrays, while accepting z and p array_likes as inputs.