<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def _normalise_weights(logZ, weights, ntrim=None):
 """ Correctly normalise the weights for trimming This takes a list of log-evidences, and re-normalises the weights so that the largest weight across all samples is 1, and the total weight in each set of samples is proportional to the evidence. Parameters logZ: array-like log-evidences to weight each set of weights by weights: array-like of numpy.array list of not necessarily equal length list of weights Returns ------- logZ: numpy.array evidences, renormalised so that max(logZ) = 0 weights: list of 1D numpy.array normalised weights """

    logZ -= logZ.max()

    Zs = numpy.exp(logZ)

    weights = [w/w.sum()*Z for w, Z in zip(weights, Zs)]

    wmax = max([w.max() for w in weights])

    weights = [w/wmax for w in weights]

    ntot = sum([w.sum() for w in weights])

    if ntrim is not None and ntrim < ntot:
        weights = [w*ntrim/ntot for w in weights]

    return logZ, weights