获取Python的一系列日子

时间:2016-01-20 15:17:35

标签: 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)

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

**编辑** 我道歉,我已经更新了正确的所需输出。

使用Python 2.7.6

5 个答案:

答案 0 :(得分:2)

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

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

我确信这里有人可以提出更优雅的解决方案,但这可以让你开始。

只是为了彻底,我相信在python 3中可以完成同样的事情(其中range产生迭代器而不是列表)使用itertools.chain而不是+来连接{{ 1}}和r1

答案 1 :(得分:2)

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

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))

结果:

[1, 2, 3, 4]
[5, 6, 0, 1, 2]
[5, 6, 0, 1, 2]

答案 2 :(得分:2)

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]

答案 3 :(得分:0)

这是我的解决方案:

def get_range(f):
    week = list(range(7))
    if f[1] < f[0]:
        _curr = week[f[0]:]
        _rest = week[:f[1]+1]
        return _curr+_rest
    else:
        return range(f[0],f[1]+1)

结果:

get_range([1,4]) -> [1, 2, 3, 4]
get_range([5,2]) -> [5, 6, 0, 1, 2]

答案 4 :(得分:0)

您可以使用此功能:

def getrange(start,end):
    result = [start]
    week = [0, 1, 2, 3, 4, 5, 6]
    c = start
    while (week[c%7] != end):
        c = c + 1
        result.append(week[c%7])
    return result

<强>测试用例:

getrange(1,4) =>[1,2,3,4]
getrange(5,2) =>[5,6,0,1,2]