使用循环而不是手动输入来创建时间列表

时间:2018-10-07 11:05:00

标签: python

我正在尝试创建一个列表,其中包含从上午9点到下午5点的间隔为30分钟的选项。 例如

    times = ['09:00-09:30', '09:30-10:00', '10:00-10:30', '10:30-11:00', '11:00-11:30', '11:30-12:00',
            '12:00-12:30', '12:30-13:00', '13:00-13:30', '13:30-14:00', '14:00-14:30', '14:30-15:00',
            '15:00-15:30', '15:30-16:00', '16:00-16:30', '16:30-17:00']

使用循环或看起来不那么冗长的方法,我如何能够做到这一点?

4 个答案:

答案 0 :(得分:4)

从9点开始创建datetime对象的可迭代对象。

import datetime

fmt = '%H:%M'
start = datetime.datetime.strptime('09:00', fmt)
times = (start + datetime.timedelta(minutes=30*i) for i in range(17))

datetime对象变成字符串。

times_str = (t.strftime(fmt) for t in times)

成对遍历times_stritertools documentation有一个名为 pairwise 的食谱。您可以复制粘贴该功能,也可以从more_itertools(需要安装)中导入该功能。

from more_itertools import pairwise
result = ['-'.join(times) for times in pairwise(times_str)]

输出:

>>> print(result)
['09:00-09:30', '09:30-10:00', '10:00-10:30', '10:30-11:00', '11:00-11:30', '11:30-12:00', '12:00-12:30', '12:30-13:00', '13:00-13:30', '13:30-14:00', '14:00-14:30', '14:30-15:00', '15:00-15:30', '15:30-16:00', '16:00-16:30', '16:30-17:00']

您可以使用函数封装所有内容。

import datetime
from more_itertools import pairwise

def timepairs(start:datetime.datetime, steps:int, delta:datetime.timedelta, fmt='%H:%M'):
    times = (start + delta*i for i in range(steps + 1))
    times_str = (t.strftime(fmt) for t in times)
    return ['-'.join(times) for times in pairwise(times_str)]

演示:

>>> start = datetime.datetime.strptime('09:00', '%H:%M')
>>> timepairs(start, 16, datetime.timedelta(minutes=30))
['09:00-09:30', '09:30-10:00', '10:00-10:30', '10:30-11:00', '11:00-11:30', '11:30-12:00', '12:00-12:30', '12:30-13:00', '13:00-13:30', '13:30-14:00', '14:00-14:30', '14:30-15:00', '15:00-15:30', '15:30-16:00', '16:00-16:30', '16:30-17:00']
>>> 
>>> start = datetime.datetime.strptime('00:00', '%H:%M')
>>> timepairs(start, 12, datetime.timedelta(minutes=5))
['00:00-00:05', '00:05-00:10', '00:10-00:15', '00:15-00:20', '00:20-00:25', '00:25-00:30', '00:30-00:35', '00:35-00:40', '00:40-00:45', '00:45-00:50', '00:50-00:55', '00:55-01:00']

答案 1 :(得分:1)

import datetime

fmt='%H:%M'
time=datetime.datetime.strptime('09:00',fmt)
min30=datetime.timedelta(minutes=30)
times=[]

for i in range(16):
    times.append('%s-%s' % ( time.strftime(fmt), (time+min30).strftime(fmt)))
    time+=min30
print times

答案 2 :(得分:0)

您可以执行以下操作:。

hours = 9
minutes = 0

n = 10
cal = {}

for i in range(n):
    key = str(hours) + ":" + str(minutes)
    cal[key] = 10

    if i%2 != 0:
        hours += 1

    minutes += 30
    if minutes == 60:
        minutes = 0

print(cal)

您可以更改运行循环的次数。更改条件以运行,直到hours达到所需时间为止。

您还可以进行一些编辑以将密钥作为09:00而不是9:0来获得。

基本上,对于字典来说,您只需要将键值作为字符串即可。您可以使用所需的任何字符串,并为其分配值。像馅饼一样简单。

答案 3 :(得分:0)

带有pandas的简短代码:

In [2]:pandas.date_range("09:00", "17:00", freq="30min").time
Out[2]:
array([datetime.time(9, 0), datetime.time(9, 30), datetime.time(10, 0),
       datetime.time(10, 30), datetime.time(11, 0), datetime.time(11, 30),
       datetime.time(12, 0), datetime.time(12, 30), datetime.time(13, 0),
       datetime.time(13, 30), datetime.time(14, 0), datetime.time(14, 30),
       datetime.time(15, 0), datetime.time(15, 30), datetime.time(16, 0),
       datetime.time(16, 30), datetime.time(17, 0)], dtype=object)