我正在尝试创建一个列表,其中包含从上午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']
使用循环或看起来不那么冗长的方法,我如何能够做到这一点?
答案 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_str
。 itertools
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)