我获得了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个月,它显然不会涵盖所有月份
答案 0 :(得分:1)
很简单:
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
和{ {1}}如果它们不相等,......等等。
编辑:
要生成字符串,您还希望使用list-comp:更快,通常比y2
循环更清晰:
for
结果:
formatted_yymm = ['{:>02}{:>02}.mat'.format(yy % 100, mm) for yy, mm in yymm]
答案 1 :(得分:0)
这可以更快,也可能更具可读性,但让数学做这项工作:
>>> start = (start_year - 2000) * 12 + start_month
>>> end = (end_year - 2000) * 12 + end_month
>>> ["{:02d}{:02d}.mat".format(x // 12, x % 12) for x in range(start, end+1)]
缩写输出
['0503.mat', '0504.mat', '0505.mat', '0506.mat', ...
'1610.mat', '1611.mat', '1700.mat', '1701.mat', '1702.mat']
答案 2 :(得分:-2)
strings = ["{}{}.mat".format(str(year - 2000).zfill(2), str(month).zfill(2)) \
for year in range(start_year, end_year + 1) \
for month in range(start_month, end_month + 1)]