在Python中获得一系列的天数

2024-09-29 07:32:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在制作一个日程表应用程序,我需要一种方法来分类每个区块的天数范围。天数标记为整数:

MON, TUE, WEN, THU, FRI, SAT, SUN0, 1, 2, 3, 4, 5, 6

假设我安排了一个从周二开始到周五结束的街区。 确定其范围很容易:

range(block.start_day, block.end_day +1)会给我(1, 4)。在

但如果一个街区从周六开始到周三结束,那就行不通了。在

我需要的结果是(5, 6, 0, 1, 2)。在

我有点困在这部分了。我想我可以用模运算符,但我不确定。在

**编辑** 抱歉,我已经更新了正确的期望输出。在

使用Python2.7.6


Tags: 方法标记应用程序分类整数区块blockday
3条回答

你可以做的一件事是使用条件逻辑:

def get_range(start_day, end_day):
    if (start_day < end_day):
        r = range(start_day, end_day + 1)
    else:
        r1 = range(start_day, 7)
        r2 = range(0, end_day + 1)
        r = r1 + r2
    return r

我相信这里有人能想出一个更优雅的解决方案,但这让你开始了。在

为了彻底起见,我相信在python3中也可以实现同样的事情(range生成迭代器,而不是列表),使用itertools.chain而不是{}来连接{}和{}。在

处理奇数范围的一种方法是实现自定义范围函数:

def date_range(start, end):
    'Return a list of weekday values in the range [START, END]'
    names = dict(zip(
        ['MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT', 'SUN'],
        range(7)))
    try:
        start = names[start.upper()]
    except:
        pass
    try:
        end = names[end.upper()]
    except:
        pass
    while True:
        yield start % 7
        if start % 7 == end % 7:
            return
        start += 1

print list(date_range('tue', 'fri'))
print list(date_range('sat', 'wed'))
print list(date_range(5, 2))

结果:

^{pr2}$
def days(f, L):
    if f > L:
        x = list(range(0, 7))
        return x[f:] + x[:L+1]
    else:
        return list(range(f, L+1))

days(5, 3)返回[5, 6, 0, 1, 2, 3]

days(3, 5)返回[3, 4, 5]

相关问题 更多 >