在处理许多年份的数据中,遇到需要将查询到的年份进行归类汇总的需求。要求是连续的年份只显示最早与最末的年份,独立没有连续的年份可单独跟随在之前
例如:
将原始数组 [1998, 1999, 2000, 2008, 2016, 2017, 2018, 2019]
处理成 1999 - 2000, 2008, 2016 - 2019
直接上代码
def getYearArray(year_array_list): list = "" year_start = year_array_list[0]
year_end = year_start
year_add = 0 year_cycle = "" last_year = 0 year_end = year_start for year_now in year_array_list: if(year_now == year_start + year_add):
year_end = year_now;
year_cycle = str(year_start) + " - " + str(year_end)
year_add = year_add + 1 if(year_now == year_array_list[len(year_array_list)-1]): list = list + ", " + year_cycle else: if(len(list) == 0): list = year_cycle else: if(year_cycle != ""): list = list + ", " + year_cycle else: list = list + ", " + str(year_start)
year_start = year_now
year_end = year_start
year_cycle = "" year_add = 1 if(len(year_array_list) == year_add): list = year_cycle print year_array_list return list if __name__ == '__main__': print getYearArray([1999, 2000, 2001, 2002, 2005, 2006, 2007, 2009, 2013, 2016, 2017, 2018, 2019])
代码的关键在于判断与循环的点
- 若年份连续,year_cycle的尾数则需要更新
- 如果年份未连续,若year_cycle存在值,则追加到list,否则,追加当前份
- 最后判断若整个数组为连续年份时,数组长度为累加的次数
运行结果输出:
[1999, 2000, 2001, 2002, 2005, 2006, 2007, 2009, 2013, 2016, 2017, 2018, 2019] 1999 - 2002, 2005 - 2007, 2009, 2013, 2016 - 2019
以上代码还是存在问题,在后面的作业中,发现了新的解析思路:
通过两个循环,连续则表示在一个list内,否则在new下一个list
def getYearArray(year_array_list): year_summary = []
year_loop = []
year_array_list_distinct = [] for year_dis in year_array_list: if(year_dis not in year_array_list_distinct):
year_array_list_distinct.append(year_dis)
year_array_list = year_array_list_distinct for i in range(len(year_array_list)):
year_now = year_array_list[i] if(i == 0):
year_loop.append(year_now)
year_summary.append(year_loop) elif(year_now == year_summary[len(year_summary) - 1][len(year_summary[len(year_summary) - 1]) - 1] + 1):
year_summary[len(year_summary) - 1].append(year_now) else:
year_loop = []
year_loop.append(year_now)
year_summary.append(year_loop)
year_final = "" for year_loop_list in year_summary: if(len(year_loop_list) == 1): if(year_final == ""):
year_final = str(year_loop_list[0]) else:
year_final = year_final + ", " + str(year_loop_list[0]) else: if(year_final == ""):
year_final = str(year_loop_list[0]) + " - " + str(year_loop_list[len(year_loop_list) -1]) else:
year_final = year_final + ", " + str(year_loop_list[0]) + " - " + str(year_loop_list[len(year_loop_list) -1]) # print year_final