Skip to main content
 首页 » 编程设计

Python:在两个日期之间生成 YYMM 字符串

2025年05月04日21shanyou

我得到了 start_year、end_year、start_month 和 end_month,例如

start_year = 2005 
end_year   = 2017 
start_month = 3 
end_month   = 2 

我想生成以下字符串: 0503.mat, 0504.mat, 0505.mat, 0506.mat, 0507.mat, 0508.mat, 0509.mat, 0510.mat, 0511.mat, 0512.mat, 0601.mat, ..0612.mat, ....., ...1701.mat, 1702.mat

即结合年和月,并为给定的开始年/月和结束年/月之间的所有月份生成这样的组合

编辑:

.mat 在所有输出上重复

这是我目前尝试过的:

k = 0 
for yr in range( 2005, 2007 + 1 ): 
    for mn in range( 1, 12 + 1 ): 
        YYMM[k]    =   "{:02}{:02}.mat".format(yr % 100, mn) ) 
        k = k + 1 

但显然,如果我从 2005 年的第 3 个月开始到 2006 年的第 7 个月,它不会涵盖所有月份

请您参考如下方法:

非常简单:

start_year = 2005 
end_year = 2007 
start_month = 3 
end_month = 2 
yymm = [(yy, mm) for yy in range(start_year, end_year + 1) for mm in range(1, 13) 
        if (start_year, start_month) <= (yy, mm) <= (end_year, end_month)] 

这会生成一个元组列表

[(2005, 3), (2005, 4), (2005, 5), (2005, 6), (2005, 7), (2005, 8), 
 (2005, 9), (2005, 10), (2005, 11), (2005, 12), (2006, 1), (2006, 2), 
 (2006, 3), (2006, 4), (2006, 5), (2006, 6), (2006, 7), (2006, 8), 
 (2006, 9), (2006, 10), (2006, 11), (2006, 12), (2007, 1), (2007, 2)] 

我会把字符串格式留给你。

工作原理:我们利用 Python 的元组比较机制。比较(x1, x2, ... xn)和(y1, y2, ... yn)时,顺序由x1决定> 和 y1 如果它们不相等,如果它们不相等,则通过 x2 和 y2 如果它们不相等,...等等。

编辑: 要生成字符串,您还想使用 list-comp:比 for 循环更快,而且通常更干净:

formatted_yymm = ['{:>02}{:>02}.mat'.format(yy % 100, mm) for yy, mm in yymm] 

结果:

['0503.mat', '0504.mat', '0505.mat', '0506.mat', '0507.mat', '0508.mat', 
 '0509.mat', '0510.mat', '0511.mat', '0512.mat', '0601.mat', '0602.mat', 
 '0603.mat', '0604.mat', '0605.mat', '0606.mat', '0607.mat', '0608.mat', 
 '0609.mat', '0610.mat', '0611.mat', '0612.mat', '0701.mat', '0702.mat']