在处理许多年份的数据中,遇到需要将查询到的年份进行归类汇总的需求。要求是连续的年份只显示最早与最末的年份,独立没有连续的年份可单独跟随在之前

例如:
将原始数组 [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]) 

代码的关键在于判断与循环的点

  1. 若年份连续,year_cycle的尾数则需要更新
  2. 如果年份未连续,若year_cycle存在值,则追加到list,否则,追加当前份
  3. 最后判断若整个数组为连续年份时,数组长度为累加的次数

运行结果输出:

[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