使用python处理年份范围的汇总

在处理许多年份的数据中,遇到需要将查询到的年份进行归类汇总的需求:

  • 连续的年份只显示最早与最末的年份
  • 独立没有连续的年份可单独跟随在之前

例如,将数组[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