code: def concatenate_zpks(*zpks):
      
      zeros, poles, gains = zip(*zpks)
      return (numpy.concatenate(zeros),
              numpy.concatenate(poles),
              reduce(operator.mul, gains, 1))
docs: Concatenate a list of zero-pole-gain (ZPK) filters
  
      Parameters
      ----------
      *zpks
          one or more zero-pole-gain format, each one should be a 3-`tuple`
          containing an array of zeros, an array of poles, and a gain `float`
  
      Returns
      -------
      zeros : `numpy.ndarray`
          the concatenated array of zeros
      poles : `numpy.ndarray`
          the concatenated array of poles
      gain : `float`
          the overall gain
  
      Examples
      --------
      Create a lowpass and a highpass filter, and combine them:
  
      >>> from gwpy.signal.filter_design import (
      ...     highpass, lowpass, concatenate_zpks)
      >>> hp = highpass(100, 4096)
      >>> lp = lowpass(1000, 4096)
      >>> zpk = concatenate_zpks(hp, lp)
  
      Plot the filter:
  
      >>> from gwpy.plot import BodePlot
      >>> plot = BodePlot(zpk, sample_rate=4096)
      >>> plot.show()