使用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])
代码的关键在于判断与循环的点
- 若年份连续,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