Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python如何在带条件的列表理解中使用多个for循环_Python_Python 3.x_For Loop_List Comprehension - Fatal编程技术网

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
    本身就是一个有效的索引
  • 这两个工作日检查是多余的

感谢您的解决方案。感谢您的解决方案。