Python如何在带条件的列表理解中使用多个for循环
我仍在编写下面的代码,代码运行得非常好。我试图减少代码行数Python如何在带条件的列表理解中使用多个for循环,python,python-3.x,for-loop,list-comprehension,Python,Python 3.x,For Loop,List Comprehension,我仍在编写下面的代码,代码运行得非常好。我试图减少代码行数 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 i
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(20162020)
此代码返回2016年第一个月,该月有5个星期五、星期六、星期日;与2020年最后一个月相同,有多少个月满足此条件
所以输出是:('Jan','May',5)
x变量的注释部分是我尝试过的,它返回0和None(导致else语句)您的
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)
我修正了一些小问题:
- 直接在列表comp中获取
,而不是在末尾获取两次month_abbr
本身就是一个有效的索引-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)
我修正了一些小问题:
- 直接在列表comp中获取
,而不是在末尾获取两次month_abbr
本身就是一个有效的索引-1
- 这两个工作日检查是多余的