我得到了 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']
