<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def wirevector_list(names, bitwidth=None, wvtype=WireVector):
 """ Allocate and return a list of WireVectors. :param names: Names for the WireVectors. Can be a list or single comma/space-separated string :param bitwidth: The desired bitwidth for the resulting WireVectors. :param WireVector wvtype: Which WireVector type to create. :return: List of WireVectors. Additionally, the ``names`` string can also contain an additional bitwidth specification separated by a ``/`` in the name. This cannot be used in combination with a ``bitwidth`` value other than ``1``. Examples: :: wirevector_list(['name1', 'name2', 'name3']) wirevector_list('name1, name2, name3') wirevector_list('input1 input2 input3', bitwidth=8, wvtype=pyrtl.wire.Input) wirevector_list('output1, output2 output3', bitwidth=3, wvtype=pyrtl.wire.Output) wirevector_list('two_bits/2, four_bits/4, eight_bits/8') wirevector_list(['name1', 'name2', 'name3'], bitwidth=[2, 4, 8]) """

    if isinstance(names, str):
        names = names.replace(',', ' ').split()

    if any('/' in name for name in names) and bitwidth is not None:
        raise PyrtlError('only one of optional "/" or bitwidth parameter allowed')

    if bitwidth is None:
        bitwidth = 1
    if isinstance(bitwidth, numbers.Integral):
        bitwidth = [bitwidth]*len(names)
    if len(bitwidth) != len(names):
        raise ValueError('number of names ' + str(len(names))
                         + ' should match number of bitwidths ' + str(len(bitwidth)))

    wirelist = []
    for fullname, bw in zip(names, bitwidth):
        try:
            name, bw = fullname.split('/')
        except ValueError:
            name, bw = fullname, bw
        wirelist.append(wvtype(bitwidth=int(bw), name=name))
    return wirelist