在python中以半小时为增量创建一个选择列表

时间:2013-08-15 06:11:10

标签: python

我正在尝试使用<select>创建<option>,以半小时为增量创建list一天中的所有时间(12小时时间而不是24小时时间)。 我尝试使用xrangecycle创建重复数字的list。我只是无法得到它。当然我可以手动写出来,但那有什么乐趣? 最终结果将是:

['12:00am', '12:30am','1:00am', '1:30am', '2:00am', '2:30am', '3:00am', '3:30am', '4:00am', '4:30am', '5:00am', '5:30am', '6:00am', '6:30am', '7:00am', '7:30am', '8:00am', '8:30am', '9:00am', '9:30am', '10:00am', '10:30am', '11:00am', '11:30am', '12:00am', '12:30am', '1:00pm', '1:30pm', '2:00pm', '2:30pm', '3:00pm', '3:30pm', '4:00pm', '4:30pm', '5:00pm', '5:30pm', '6:00pm', '6:30pm', '7:00pm', '7:30pm', '8:00pm', '8:30pm', '9:00pm', '9:30pm', '10:00pm', '10:30pm', '11:00pm', '11:30pm']

4 个答案:

答案 0 :(得分:4)

['%s:%s%s' % (h, m, ap) for ap in ('am', 'pm') for h in ([12] + list(range(1,12))) for m in ('00', '30')]

答案 1 :(得分:3)

如果时间以分钟为单位,以下情况应该可以正常工作:

xrange(0, 1440, 30)

如果它们应该采用其他格式,则可以生成它们,然后转换为您想要的任何格式。

例如:

[(str(i / 60) if i / 60 > 9 else "0" + str(i / 60)) + ":" + (str(i % 60) if i % 60 > 9 else "0" + str(i % 60)) for i in xrange(0, 1440, 30)]

给予HH:MM

要获得HH:MM [AM / PM],以下情况应该有效,如果相当混乱:

[((str(i / 60 % 12 + 1) if (i / 60 % 12 + 1) > 9 else "0" + str(i / 60 % 12 + 1)) + ":" + (str(i % 60) if i % 60 > 9 else "0" + str(i % 60)) + ("am" if i / 60 < 11 or i / 60 > 22 else "pm")) for i in xrange(0, 1440, 30)]

编辑:这将是正确的顺序,但不会在正确的位置开始。要解决这个问题,如果从上面形成的列表是l,只需要

l[-2:] + l[:-2]

编辑2:此外,虽然这应该有效,但它确实很混乱,所以我可能会在一些函数中将所有转换从几分钟变为日期字符串,然后在列表解析中调用该函数。

答案 2 :(得分:2)

>>> s = datetime.datetime.strptime('12:00 AM', '%I:%M %p')
>>> r = []
>>> r.append(s.strftime('%I:%M %p'))
>>> for i in range(30,60*24,30):
...     r.append((s+datetime.timedelta(minutes=i)).strftime('%I:%M %p'))
...
>>> r
['12:00 AM', '12:30 AM', '01:00 AM', '01:30 AM', '02:00 AM', '02:30 AM', '03:00 AM', '03:30 AM', '04:00 AM', '04:30 AM', '05:00 AM', '05:30 AM', '06:00 AM', '06:30 AM', '07:00 AM', '07:30 AM', '08:00 AM', '08:30 AM', '09:00 AM', '09:30 AM', '10:00 AM', '10:30 AM', '11:00 AM', '11:30 AM', '12:00 PM', '12:30 PM', '01:00 PM', '01:30 PM', '02:00 PM', '02:30 PM', '03:00 PM', '03:30 PM', '04:00 PM', '04:30 PM', '05:00 PM', '05:30 PM', '06:00 PM', '06:30 PM', '07:00 PM', '07:30 PM', '08:00 PM', '08:30 PM', '09:00 PM', '09:30 PM', '10:00 PM', '10:30 PM', '11:00 PM', '11:30 PM']

答案 3 :(得分:1)

for h in range(24):
    print '<option value="%i">%i:00</option>' % (h, h)
    print '<option value="%i">%i:30</option>' % (h, h)

是的(几乎)重复自己:00 /:30很糟糕,但这很容易。

BAH,你编辑了包含数组的问题,我以为你想要HTML - 忽略这个

相关问题