开发者

Clean way of creating list of hours

I'd like to create a list of hours that is a tuple of the 24-hour based time (in a digit) and a string representation of a 12-hour based time.

The format would be like this:

[(0, "12 AM"), (1, "1 AM), ..., (13, "1PM"), ... ]

I was able to get something 开发者_JS百科like this

hours = [(0,"12 AM")]
hours += [(hour,str(hour) + " AM") for hour in range(1, 12)]
hours += [(12,"12 PM")]
hours += [(hour+12,str(hour) + " PM") for hour in range(1, 12)]

But I feel that there is a cleaner way of doing this, but can't figure it out.


import datetime as dt
hours = [(i, dt.time(i).strftime('%I %p')) for i in range(24)]


>>> hours = [(n, "%d %s" % (n % 12 or 12, ["AM", "PM"][n > 11])) for n in range(24)]
>>> hours
[(0, '12 AM'), (1, '1 AM'), (2, '2 AM'), (3, '3 AM'), (4, '4 AM'), (5, '5 AM'), (6, '6 AM'), (7, '7 AM'), (8, '8 AM'), (9, '9 AM'), (10, '10 AM'), (11, '11 AM'), (12, '12 PM'), (13, '1 PM'), (14, '2 PM'), (15, '3 PM'), (16, '4 PM'), (17, '5 PM'), (18, '6 PM'), (19, '7 PM'), (20, '8 PM'), (21, '9 PM'), (22, '10 PM'), (23, '11 PM')]


Here's another one-liner for you:

[(hour24, '%d %s' % (hour12, (lambda x: 'AM' if x < 12 else 'PM')(hour24))) for hour12, hour24 in zip(([12]+range(1, 12)*2), range(0, 24))]


I also found an alternative which I am using as a generator:

def dayrange(start_date):
for n in range(25):
    yield start_date + i*timedelta(hours = 1)

with start_date a datetime.datetime object.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜