Python:在两个日期

时间:2016-02-11 20:21:53

标签: python

我获得了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个月,它显然不会涵盖所有月份

3 个答案:

答案 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)时,排序由x1y1确定,如果它们不相等,如果是,则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)]