求解答一下python方法的返回

有这样一个方法:

def moving_average(a, w=10):
    if len(a) < w: 
        return a[:]    
    return [val if idx < w else sum(a[(idx-w):idx])/w for idx, val in enumerate(a)]

我想知道这个返回后面是什么意思,求详细说明下,if else ,for迭代我都懂,但是还是看不懂

阅读 2.1k
3 个回答

如果这样还看不懂,就没办法了

def moving_average(a, w=10):
    if len(a) < w:
        return a[:]

    print([val if idx < w else sum(a[(idx - w):idx]) / w for idx, val in enumerate(a)])
    # 一行代码等价于如下
    xxx = []
    for idx, val in enumerate(a):
        # 如果列表 a 的下标小于 w, 直接将元素添加进 xxx 列表
        if idx < w:
            xxx.append(val)
        # 向前取 10 个元素计算平均值, 添加到 xxx 列表
        else:
            xxx.append(sum(a[(idx - w):idx]) / w)
    print(xxx)


if __name__ == '__main__':
    a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
    moving_average(a)
def moving_average(a, w=10):
    if len(a) < w: 
        return a[:]    
    # return [val if idx < w else sum(a[(idx-w):idx])/w for idx, val in enumerate(a)]
    
    val_list = []
    for idx, val in enumerate(a):
        if idx < w:
            val_list.append(val)
        else:
            val_list.append(sum(a[(idx - w):idx]) / w)

楼上思路对的,这个是py的高级用法,叫做“推导式”,楼主可以学习下。。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题