📜  Python|列表中每个 n 长度连续段的平均值(1)

📅  最后修改于: 2023-12-03 15:04:24.493000             🧑  作者: Mango

Python | 列表中每个 n 长度连续段的平均值

在Python中,可以使用列表切片和循环来计算每个n长度连续段的平均值。下面给出一个示例代码片段。

def segment_mean(lst, n):
    """
    计算列表中每个n长度连续段的平均值。

    参数:
    lst -- 需要处理的列表
    n -- 连续段长度

    返回值:
    包含每个n长度连续段的平均值的列表
    """
    return [sum(lst[i:i+n])/n for i in range(0,len(lst),n) if len(lst[i:i+n])==n]

其中,lst[i:i+n]就是取出列表中第i至i+n-1个元素组成一个新列表。然后使用sum()函数和/运算符计算新列表中的所有元素的平均值。最后,返回一个包含所有连续段平均值的列表。

为了使得该函数更加健壮,我们还要考虑一些特殊情况。如下所示:

def segment_mean(lst, n):
    """
    计算列表中每个n长度连续段的平均值。

    参数:
    lst -- 需要处理的列表
    n -- 连续段长度

    返回值:
    包含每个n长度连续段的平均值的列表
    """
    result = []
    if not isinstance(lst, list):
        raise TypeError('lst必须为列表类型')
    if not isinstance(n, int):
        raise TypeError('n必须为整数类型')
    if n <= 0:
        raise ValueError('n必须为正整数')
    if n > len(lst):
        raise ValueError('n大于lst长度')
    for i in range(0, len(lst), n):
        segment = lst[i:i+n]
        if len(segment) == n:
            result.append(sum(segment)/n)
    return result

在这个版本的函数中,我们仍然使用了列表切片和循环来计算每个连续段的平均值。但是,我们加入了一些输入校验,以避免函数输入无效数据造成的异常。例如,如果输入的lst不是列表类型,那么就会抛出一个TypeError异常;如果输入的n不是整数类型,就会抛出另外一个TypeError异常。又比如,如果输入的n小于等于0,就会抛出一个ValueError异常;如果输入的n大于lst的长度,就会抛出另外一个ValueError异常。

这样,我们就得到了一份更加完整的代码实现。