【问题标题】:Create a select list in half-hour increments in python在python中以半小时为增量创建一个选择列表
【发布时间】:2013-08-15 06:11:10
【问题描述】:

我正在尝试使用<option> 创建一个<select>,该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']

【问题讨论】:

  • 可以肯定的是,您要查找的最终结果是[12:00am, 12:30am, 1:00am] 等列表?
  • @PeterFoti:没错。

标签: python


【解决方案1】:
['%s:%s%s' % (h, m, ap) for ap in ('am', 'pm') for h in ([12] + list(range(1,12))) for m in ('00', '30')]

【讨论】:

    【解决方案2】:

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

    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:此外,虽然这应该可行,但它确实很混乱,所以我可能会将所有从分钟到日期字符串的转换放在某个函数中,然后在列表理解中调用该函数。

    【讨论】:

    • 我目前无法投票,但您已经获得了一些漂亮的代码。把它留到很晚,我会在可能的时候投票!
    • 非常酷。我收到了:['01:00am', '01:30am', '02:00am', '02:30am', '03:00am', '03:30am', '04:00am', '04:30am', '05:00am', '05:30am', '06:00am', '06:30am', '07:00am', '07:30am', '08:00am', '08:30am', '09:00am', '09:30am', '10:00am', '10:30am', '11:00am', '11:30am', '12:00am', '12:30am', 'pm', 'pm', 'pm', 'pm', 'pm', 'pm', 'pm', 'pm', 'pm', 'pm', 'pm', 'pm', 'pm', 'pm', 'pm', 'pm', 'pm', 'pm', 'pm', 'pm', 'pm', 'pm', 'pm', 'pm', 'pm'] 我错过了什么吗?
    • 不,我遗漏了几个括号。我总是忘记python的三元运算符以奇怪的方式关联(习惯于C的?:)。现在应该修好了。哦,我似乎也知道哪个 12 是上午,哪个是下午。这需要一些思考,但我应该尽快进行修改。
    【解决方案3】:
    >>> 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']
    

    【讨论】:

      【解决方案4】:
      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 重复自己是不好的,但这很容易。

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

      【讨论】:

        猜你喜欢
        • 2011-09-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-07
        • 2013-09-10
        • 2021-01-19
        • 1970-01-01
        相关资源
        最近更新 更多