Ну, как начинающий Python, я немного озадачился. Я думаю, что logi c будет:
- найти индекс месяца, в котором вы работаете в настоящее время, например: April
- установите его на текущий год
- l oop через остальную часть списка, используя структуру
if...elif...
для генерации значений, согласно которым мы находимся в текущем месяце.
Я использовал from dateutil.relativedelta import relativedelta
согласно этот старый пост на SO.
import datetime as dt
from dateutil.relativedelta import relativedelta
def get_years_for(months):
today = dt.date.today()
try:
month_index = months.index(today.strftime("%B"))
except ValueError:
return []
current_month = today.month
current_year = today.year
day1 = dt.date(current_year, current_month, 1)
years = {month_index: current_year}
for idx, month in enumerate(months):
if idx < month_index:
years[idx] = (day1 - relativedelta(months=month_index - idx)).year
elif idx > month_index:
years[idx] = (day1 + relativedelta(months=idx - month_index)).year
return [years[i] for i in sorted(years)]
Я уверен, что это можно сделать аккуратнее, но мне понравился вызов, так как я новичок в этом =)
example1 = ["January", "February", "March", "April", "May"]
[2020, 2020, 2020, 2020, 2020]
example2 = ["December", "January", "February", "March", "April"]
[2019, 2020, 2020, 2020, 2020]
example3 = ["April", "May", "June", "July", "August", "September", "October", "November", "December", "January", "February"]
[2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2021, 2021]
example4 = ["November", "December", "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December", "January", "February"]
[2019, 2019, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2021, 2021]
Все это было сделано с предположением, что текущий месяц, например, апрель, встречается только один раз в вашем списке (как по вашему объяснению). Даже тогда это будет работать до тех пор, пока мы можем с уверенностью предположить, что первый индекс апреля является вашей стартовой позицией.
Надеюсь, это поможет.