#python #python-3.x #for-loop #list-comprehension
#python #python-3.x #цикл for #понимание списка
Вопрос:
Я все еще работаю над приведенным ниже кодом, код работает отлично. Я пытаюсь сократить количество строк кода.
import calendar as c
def solve(first, last):
weekends = []
# x = [weekends.append(m) if c.weekday(y,m,1) == 4 and c.weekday(y,m,31) == 6 else 0 for m in [1,3,5,7,8,10,12] for y in range(first,last 1)]
for y in range(first,last 1):
for m in [1,3,5,7,8,10,12]:
if c.weekday(y,m,1) == 4 and c.weekday(y,m,31) == 6:
weekends.append(m)
return c.month_abbr[weekends[0]], c.month_abbr[weekends[len(weekends)-1]], len(weekends)
При вызове для : solve(2016,2020)
Этот код возвращает первый месяц 2016 года, в котором 5 пятниц, суббот, воскресений; то же самое для последнего месяца 2020 года и сколько месяцев удовлетворяет этому условию.
Таким образом, вывод : ('Jan', 'May', 5)
Часть комментария переменной x — это то, что я пробовал, и это возвращает 0 и None (причина утверждения else)
Ответ №1:
Порядок операторов в вашем x = ...
немного перепутан; вы if
должны фильтровать, какие значения включать, а не какое из двух альтернативных значений использовать. Но также: не используйте append
в понимании списка для добавления в другой список! Вместо этого вашим результатом должно быть само понимание списка.
def solve(first, last):
weekends = [c.month_abbr[m] for y in range(first,last 1)
for m in [1,3,5,7,8,10,12]
if c.weekday(y,m,1) == 4]
return weekends[0], weekends[-1], len(weekends)
Некоторые незначительные моменты, которые я исправил:
- получить
month_abbr
непосредственно в list comp вместо двух раз в конце -1
сам по себе является допустимым индексом- две проверки в будний день избыточны
Комментарии:
1. Спасибо за ваше решение.