Допустим, у нас есть текст
Несмотря на то, что мы празднуем Страстную пятницу и Пасхальное воскресенье, такие дни, как «воскресенье» или «среда», не упоминаются.
Обратите внимание, что упомянуты следующие дни недели, Friday, Sunday, Sunday, Wednesday
Нам нужно вывести некоторую переменную weekdays, которая в этом случае будет иметь:
weekdays: [3,5,7]
Предполагая,
Какой был бы самый питонический способ приблизиться к такой информации?
Верно. Подходов может быть несколько. Например, мы можем использовать дату и время или регулярное выражение. Это кажется очень простым вопросом, но чтобы он работал оптимально, я пытаюсь придумать наиболее оптимальный и Pythonic способ решения этой проблемы.
the most Pythonic way to approach
- ИМО найти работающий метод; оценить его эффективность; точно настройте проблемные детали.
Я бы использовал регулярное выражение для определения дней недели, которые появляются в тексте, а затем использовал понимание набора, чтобы получить желаемые индексы:
days_of_week = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]
day_indices = dict(zip(days_of_week, range(1, 8)))
expr = "|".join(rf"\b{day}\b" for day in days_of_week)
matches = re.findall(expr, text)
result = sorted(list(set(day_indices[day] for day in matches)))
print(result)
Это выводит:
[3, 5, 7]
Это потрясающая реализация, спасибо!! Очень жаль, что мудрые модераторы решили закрыть вопрос, потому что этот ответ - жемчужина.
Вы можете создать словарь дней, а затем проверить ключи по словам в заданном тексте.
# Dictonary with days as keys and numbers as values
day_dict = {"Monday": 1, "Tuesday": 2, "Wednesday":3 }
text = "Even though we celebrate Good Friday and Easter Sunday, there is no mention of days such as 'Sunday' or 'Wednesday' in the Bible."
res=[]
# loop over words in text
for word in text.split(' '):
# get dict value based on word
a = day_dict.get(word)
# if word exists in dict and is not yet in your "result" --> add it
if a and a not in res:
res.append(a)
Пожалуйста, поделитесь своей попыткой. Найти код для разбора дней недели должно быть легко. Затем преобразовать их в числа.