Создайте два элемента условно во время понимания списка - PullRequest
1 голос
/ 07 февраля 2020

Задача состоит в том, чтобы преобразовать удобочитаемые временные рамки в python дружественные. Таймфреймы могут включать только следующие форматы:

  • '9: 00–9: 45 PM'
  • '9: 00 AM – Midnight'
  • ' 9:00 - полдень '
  • ' Полдень - 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. Я ищу только список. Может ли кто-нибудь помочь мне с этим?

Заранее спасибо.

1 Ответ

0 голосов
/ 07 февраля 2020

Вы можете использовать регулярное выражение:

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 часа"

...