我正在尝试创建每个指定时间间隔内包含的小时数列表,这对于循环来说会非常复杂。因此,我想提出datetime
条建议。
# input in format DDHH/ddhh:
validity = ['2712/2812','2723/2805','2800/2812']
# demanded output:
val_hours = ['2712', '2713', '2714'..., '2717', '2723', '2800',...'2804',]
如果将有效期的最后一个小时视为无效,那是很好的,因为间隔时间在该小时之前或更准确地说在上一个小时的第59分钟之前结束了。
我已经尝试过使用if条件和循环的相当复杂的方法,但是我说服了有更好的方法-一如既往。
类似于:
#input in format DDHH/ddhh:
validity = ['2712/2812','2723/2805','2800/2812']
output = []
#upbound = previsously defined function defining list of lengt of each group
upbound = [24, 6, 12]
#For only first 24-hour group:
for hour in range(0,upbound[0]):
item = int(validity[0][-7:-5]) + hour
if (hour >= 24):
hour = hour - 24
output = output + hour
此外,我还必须在日期小于10的数字前加上数字零,例如112(祖鲁语的01st 12:00),并确保日期正确。
在我看来,环路和IF只是使事情变得复杂。更不用说错误处理了,它看起来像是两个或三个条件。
谢谢您的帮助!
答案 0 :(得分:1)
对于每个有效字符串,我使用pizza_prices[2]
进行解析,然后根据开始日期小于或等于结束日期,或者大于结束日期,计算小时数。
对于小于或等于结束日期的开始日期,我认为是原始有效字符串,否则我将创建两个字符串25
和datetime.strptime
start_date/3023
输出看起来像这样,不确定是否是所需的格式!
0100/end_date
答案 1 :(得分:0)
最后,我创建了一个简单的东西:
validity = ['3012/0112','3023/0105','0110/0112']
upbound = [24, 6, 12]
hours_list = []
for idx, val in enumerate(validity):
hours_li = []
DD = val[:2]
HH = val[2:4]
dd = val[5:7]
hh = val[7:9]
if DD == dd:
for i in range(int(HH),upbound[idx]):
hours_li.append(DD + str(i).zfill(2))
if DD <> dd:
for i in range(int(HH),24):
hours_li.append(DD + str(i).zfill(2))
for j in range(0,int(hh)):
hours_li.append(dd + str(j).zfill(2))
hours_list.append(hours_li)
此方法的有效性为24小时(如果条件和类似的串联块可以解决一个问题),不使用日期时间,仅使用数字和字符串。它既不是pythonic的也不是快速的,但是可以工作。