You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自定义For Loop函数仅返回1个元素而非预期371个浮点数问题求助

代码问题排查与修复方案

你的代码存在以下4个核心问题,直接导致返回列表长度不符合预期:

  • 列表初始化位置错误:y = []现在定义在月份循环的else分支内部,每进入一次else分支就会清空重置列表,最终只会保留最后一次循环的计算值。需要将y = []移动到函数最开头、所有循环逻辑的外部。
  • return语句位置错误:当前return语句写在年份循环的内部,跑完第一个年份(1990年)的所有月份循环后就直接返回结果,不会执行1991到2020年的计算逻辑。需要将return移动到所有循环的最外层,函数末尾的位置。
  • 入参被意外覆盖:函数入参名为port,循环中执行port = a[a['Portfolio'] == port]直接修改了入参的值,下一轮循环判断时port已经不是初始传入的值,会导致后续所有筛选逻辑错误。需要将该局部变量重命名,避免和入参重名。
  • 排序操作无效:port.sort_values("Volatility")没有设置inplace=True也没有赋值给新变量,排序操作不会生效,虽不影响返回列表长度,但会导致计算结果不符合预期。

修复后的代码如下:

import pandas as pd

df['date'] = pd.to_datetime(df['date'], format = '%Y-%m-%d') 
 
def function(port): 
    # 结果列表初始化移到最外层
    y = []
    for year in range(1990,2021,1): 
        for month in range(1,13,1): 
            if year == 1990 and month == 1: 
                pass 
            else:
                a = df.set_index('date')
                a = a[(a.index.year == year) & (a.index.month == month - 1)]  
                 
                a.loc['Volatility'] = a.std()  
                a = a.T 
                 
                a['Portfolio'] = pd.qcut(a['Volatility'], q=[0, .2, .4, .6, .8, 1], labels=['1','2','3','4','5']).astype(int)
                # 局部变量改名,避免覆盖入参
                selected_port = a[a['Portfolio'] == port]
                # 排序操作赋值生效
                selected_port = selected_port.sort_values("Volatility") 
                 
                b = selected_port.index 
                 
                c = df.set_index('date') 
                c = c[(c.index.year == year) & (c.index.month == month)]
                 
                c = c[b] 
                c = c.T 
                c += 1 
                c["returns"] = (c.product(axis=1) - 1) 
                C_r = c['returns'].sum() 
                 
                y.append(C_r) 
    # return移到所有循环外侧
    return y 
 
p = function(1)

运行修复后的代码即可得到长度为371的预期结果。

内容的提问来源于stack exchange,提问作者Willie Wong

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 14:21:03