加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 我怎样才能获得两天之间的所有日子?

发布时间:2020-12-20 13:00:38 所属栏目:Python 来源:网络整理
导读:我需要两天之间的所有工作日. 例: Wednesday - Friday = Wednesday,Thursday,Friday 3 - 5 = 3,4,5 Saturday - Tuesday = Saturday,Sunday,Monday,Tuesday 6 - 2 = 6,7,1,2 我很确定有一个聪明的算法来解决这个问题.我能想到的唯一算法是使用循环或if语句.
我需要两天之间的所有工作日.

例:

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,2,3,5,6,6]    # or range(7) * 2
     offset = 8 if d1 > d2 else 1
     return alldays[d1:d2 + offset]

between(0,4)
# [0,4]

between(5,2)
# [5,2]

解决方法

>>> def weekdays_between(s,e):
...     return [n % 7 for n in range(s,e + (1 if e > s else 8))]
... 
>>> weekdays_between(2,4)
[2,4]
>>> weekdays_between(5,1)
[5,1]

如果你必须从/转换到实际天数,它会更复杂一些.

>>> days = 'Mon Tue Wed Thu Fri Sat Sun'.split()
>>> days_1 = {d: n for n,d in enumerate(days)}
>>> def weekdays_between(s,e): 
...     s,e = days_1[s],days_1[e]
...     return [days[n % 7] for n in range(s,e + (1 if e > s else 8))]
... 
>>> weekdays_between('Wed','Fri')
['Wed','Thu','Fri']
>>> weekdays_between('Sat','Tue')
['Sat','Sun','Mon','Tue']

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读