Python代码优化求助:修复列表元素重复输出问题
修正Python代码以避免列表元素重复
我来帮你分析下代码出现重复列表的原因,然后给出针对性的修正方案:
问题根源
你的代码出现重复元素主要有两个原因:
- 使用了全局变量
b:如果多次调用函数,之前的结果会被保留并累加,导致重复 - 不必要的嵌套循环:虽然你的
lst里没有重复元素,但这种遍历lst来匹配的写法不仅冗余,还容易在误操作(比如lst出现重复元素)时触发多次添加,同时还会遗漏不在lst里的原始日期元素
修正方案1:自动处理所有日期并去重
如果你的需求是把所有年份为19的日期统一改成2019,同时确保列表无重复,可以用这个版本:
import pandas as pd date = ['Oct-2017', 'Dec-2016', 'Nov-2016', 'Oct-2016', 'Mar-19', 'Feb-19', 'Jan-19', 'Jun-19', 'May-19', 'Apr-19', 'Sep-19', 'Aug-19', 'Jul-19'] df = pd.Series(date) def impute_val(df): # 函数内部初始化结果列表,避免全局变量累加问题 processed_list = [] for item in df: # 拆分日期的月份和年份部分 month, year = item.split('-') # 处理年份为19的情况 if year == '19': processed_item = f"{month}-2019" else: processed_item = item # 添加前检查是否已存在,避免重复 if processed_item not in processed_list: processed_list.append(processed_item) return processed_list # 调用函数获取结果 final_result = impute_val(df) print(final_result)
修正方案2:仅处理指定列表中的元素并去重
如果你的需求是只对lst里的元素进行年份转换,同时保留原始的非lst元素并去重,可以用这个版本:
import pandas as pd date = ['Oct-2017', 'Dec-2016', 'Nov-2016', 'Oct-2016', 'Mar-19', 'Feb-19', 'Jan-19', 'Jun-19', 'May-19', 'Apr-19', 'Sep-19', 'Aug-19', 'Jul-19'] df = pd.Series(date) lst = ['Mar-19', 'Feb-19','Jan-19', 'Jun-19', 'May-19', 'Apr-19', 'Sep-19', 'Aug-19','Jul-19'] def impute_val(df, lst): processed_list = [] for item in df: if item in lst: month, year = item.split('-') processed_item = f"{month}-2019" else: processed_item = item # 去重判断 if processed_item not in processed_list: processed_list.append(processed_item) return processed_list final_result = impute_val(df, lst) print(final_result)
额外小技巧:快速去重(如果不介意顺序)
如果你的原始数据里有大量重复元素,也可以用集合来快速去重,处理完后再转回列表(注意集合会打乱元素顺序):
# 在函数最后添加这行,替换return语句 return list(set(processed_list))
内容的提问来源于stack exchange,提问作者shiva kumar
相关产品推荐
相关产品推荐

