如何在Python的while循环中为不同变量依次存储循环数据?
解决while循环中动态存储到不同变量的问题
直接定义var1、var2、var3这类独立变量的方式扩展性很差,当category长度变化时需要手动新增变量,更灵活的方案是用列表的列表来统一管理存储容器,具体修改如下:
推荐方案:使用列表的列表
category = [] # 内容由用户输入决定 # 初始化与category长度匹配的存储列表集合 vars_list = [[] for _ in category] max_count = len(category) i = 0 # 原代码中i初始化为列表是错误的,需改为整数0 while i < max_count: for ms_division in market_share_division: ms_division_df = df3[df3['Geography'] == ms_division] ms_product_df = ms_division_df[ms_division_df['Product'] == category[i]] ms_df_4 = ms_product_df[ms_product_df['Time Period'].str.contains('L 4', na=False, case=False)] ms_df_4 = ms_df_4.head(1) if len(ms_df_4) > 0: ms_df_row_1 = ms_df_4.iloc[0] # 向对应索引的列表中添加数据 vars_list[i].append(ms_df_row_1['Dollar Sales']) i += 1 # 必须添加自增,否则会陷入死循环 # 访问方式:vars_list[0]对应原var1,vars_list[1]对应原var2,以此类推
注意事项
- 原代码中
i = []是错误的,需初始化为整数0; - while循环内必须加上
i += 1,否则会无限循环; - 列表的列表方案无需手动新增变量,无论
category长度多少都能适配。
可选方案:动态访问已定义的独立变量(不推荐)
如果一定要使用var1、var2这类独立变量,可以通过locals()动态获取变量,但这种方式扩展性差,当category长度超过已定义的变量数时会报错:
category = [] var1 = [] var2 = [] var3 = [] max_count = len(category) i = 0 while i < max_count: # 根据循环次数拼接变量名 target_var = locals()[f"var{i+1}"] for ms_division in market_share_division: ms_division_df = df3[df3['Geography'] == ms_division] ms_product_df = ms_division_df[ms_division_df['Product'] == category[i]] ms_df_4 = ms_product_df[ms_product_df['Time Period'].str.contains('L 4', na=False, case=False)] ms_df_4 = ms_df_4.head(1) if len(ms_df_4) > 0: ms_df_row_1 = ms_df_4.iloc[0] target_var.append(ms_df_row_1['Dollar Sales']) i += 1
内容的提问来源于stack exchange,提问作者Rodel Silvano
相关产品推荐
相关产品推荐

