【问题标题】:Generate two elements conditionally during list comprehension在列表理解期间有条件地生成两个元素
【发布时间】:2020-05-23 16:23:50
【问题描述】:

任务是将人类可读的时间范围解析为 python 友好。时间范围只能包括以下格式:

  • '9:00 AM–9:45 PM'
  • '9:00 AM - 午夜'
  • '9:00 AM-中午'
  • '中午 - 晚上 9:45'
  • '中午 - 午夜'
  • '24 小时'

以下代码适用于除“24 小时”以外的所有情况。

data = ['9:00 AM–9:45 PM',
 '9:00 AM–Midnight',
 '9:00 AM–Noon',
 '9:00 PM–10:00 PM',
 'Noon–9:45 PM',
 'Noon–Midnight',
 '24 Hours']

for slot in data:
    print([[time(0, 0), time(23, 59)] if item == "24 Hours"    # Need help here
           else time(12, 0)if item == "Noon"
           else time(0, 0)if item == "Midnight"
           else datetime.strptime(item, "%I:%M %p").time()
           for item in slot.split("–")] )

输出:

[datetime.time(9, 0), datetime.time(21, 45)]
[datetime.time(9, 0), datetime.time(0, 0)]
[datetime.time(9, 0), datetime.time(12, 0)]
[datetime.time(21, 0), datetime.time(22, 0)]
[datetime.time(12, 0), datetime.time(21, 45)]
[datetime.time(12, 0), datetime.time(0, 0)]
[[datetime.time(0, 0), datetime.time(23, 59)]]   # Need help here

虽然我部分可以,但输出是24 hours 的列表列表。我只是在寻找一个清单。 有人可以帮我解决这个问题吗?

提前致谢。

【问题讨论】:

    标签: python-3.x iterator list-comprehension python-datetime


    【解决方案1】:

    您可以使用正则表达式:

    import re
    print(re.match('^[0-9][0-9] hours', '02 hours') is not None) # True
    print(re.match('^[0-9][0-9] hours', '9:00 AM–9:45 PM') is not None) # False
    

    您可能需要根据“24 小时”日期时间的确切格式对正则表达式进行细微修改

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-08-02
      • 2019-03-10
      • 2016-10-04
      • 2019-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多