我需要两天之间的所有工作日 .
例:
Wednesday - Friday = Wednesday, Thursday, Friday
3 - 5 = 3, 4, 5
Saturday - Tuesday = Saturday, Sunday, Monday, Tuesday
6 - 2 = 6, 7, 1, 2
我很确定有一个聪明的算法来解决这个问题 . 我能想到的唯一算法是使用循环或 if
语句 .
必须有一种优雅的方法来解决这个问题 . 我在工作日使用数字1-7,但0-6也很好 .
我能想到的最好的:
def between(d1, d2):
alldays = [0,1,2,3,4,5,6,0,1,2,3,4,5,6] # or range(7) * 2
offset = 8 if d1 > d2 else 1
return alldays[d1:d2 + offset]
between(0, 4)
# [0,1,2,3,4]
between(5,2)
# [5,6,0,1,2]
7 回答
如果你必须从/转换到实际天数,它会更复杂一些 .
怎么样(在伪代码中):
它的工作方式类似于循环缓冲区,wkday_start是从(从0开始)开始的索引,wkday_end是结束索引 .
希望这可以帮助
乔治 .
在excellent answer from Stephan202的基础上,您可以概括圆形切片的概念 .
提供的解决方案已经回答了问题,但我想提出一些额外的建议 . 我不知道你在做什么,但也许你想要实际日期呢?
这使用了优秀的python-dateutil模块 .
使用日历模块作为日期名称列表:
打印:
如果您不希望星期一到星期一返回整整一周的天数,请将d2的确定更改为
d2 = weektest.index(day2,d1)
.你问了一个算法,我明白这应该是语言独立的;但是,以下代码使用C#和LINQ表达式:
也许,使用任何语言,您应该将值归因于每一天(
Sunday=0
等)并查找与您所需的间隔匹配的所有值 .以下代码在星期一 - 星期一返回1 .