如何在Python中生成YYYYMM格式的年月序列?
Python生成连续年月序列问题
我用range(datetime.now().year - 1, datetime.now().year + 1)生成年份,输出:
2023 2024
用range(1, 13)生成月份:
1 2 ... 12
想要生成如下格式的年月序列:
202301 202302 ... 202411 202412
尝试执行语句:
range(datetime.now().year - 1, datetime.now().year + 1) * 100 + range(1,13)
报错:
unsupported operand type(s) for *: 'range' and 'int'
实际应用中有更多年份,请问如何实现?
解决方案
方法1:嵌套循环格式化
遍历每个年份和对应的月份,通过字符串格式化确保月份为两位数字:
from datetime import datetime years = range(datetime.now().year - 1, datetime.now().year + 1) months = range(1, 13) year_month_list = [] for year in years: for month in months: year_month = f"{year}{month:02d}" year_month_list.append(year_month) # 打印结果 for ym in year_month_list: print(ym)
方法2:列表推导式简化
用列表推导式将嵌套逻辑压缩为一行,代码更简洁:
from datetime import datetime years = range(datetime.now().year - 1, datetime.now().year + 1) months = range(1, 13) year_month_list = [f"{year}{month:02d}" for year in years for month in months] # 输出结果 for ym in year_month_list: print(ym)
方法3:itertools.product生成笛卡尔积
当年份或月份序列较长时,用itertools.product直接生成所有年-月组合,效率更高:
from datetime import datetime import itertools years = range(datetime.now().year - 1, datetime.now().year + 1) months = range(1, 13) year_month_list = [f"{year}{month:02d}" for year, month in itertools.product(years, months)] # 打印结果 for ym in year_month_list: print(ym)
方法4:基于datetime模块生成严格时间序列
如果需要处理复杂的时间边界(比如起始/结束不是整年度),可以通过逐月递增日期来生成:
from datetime import datetime start_year = datetime.now().year - 1 end_year = datetime.now().year current_date = datetime(start_year, 1, 1) year_month_list = [] while current_date.year <= end_year: year_month = current_date.strftime("%Y%m") year_month_list.append(year_month) # 月份递增,跨年自动切换年份 next_month = current_date.month + 1 next_year = current_date.year if next_month > 12: next_month = 1 next_year += 1 current_date = datetime(next_year, next_month, 1) # 输出结果 for ym in year_month_list: print(ym)
内容的提问来源于stack exchange,提问作者Eren
相关产品推荐
相关产品推荐

