【问题标题】:What's wrong with this list comprehension (SyntaxError: invalid syntax)?这个列表理解有什么问题(SyntaxError:无效语法)?
【发布时间】:2012-02-18 11:50:35
【问题描述】:

在“不费吹灰之力”的 LC 方面存在问题。

下面的代码sn-p:

def daterange(start_date, end_date):
    for n in range((end_date - start_date).days):
        yield start_date + dt.timedelta(n)


def get_workdays_between_dates(start_date, end_date):
    return [x in daterange(start_date, end_date) if x.date.weekday() in range(0,7)]

解析函数 get_workdays_between_dates() 时,Python 会出现“语法错误:无效语法错误”。不过我觉得还可以……

代码有什么问题?

【问题讨论】:

    标签: python list-comprehension


    【解决方案1】:

    x 是什么? :) 是的,这是一个无效的语法,您缺少 for 部分。

    [x for x in daterange(start_date, end_date) if x.date.weekday() in range(0,7)]
    

    【讨论】:

    • 呸!现在走开站在角落里。真为自己感到羞耻:)
    • 选择一个有鸡尾酒伞的阳光充足的角落
    【解决方案2】:

    除了语法错误之外,该行还有三个问题。鉴于x 似乎指的是datetime 对象:

    问题一:x.date 是一个方法,而不是一个属性

    >>> import datetime
    >>> x = datetime.datetime.now()
    >>> x
    datetime.datetime(2012, 2, 19, 9, 23, 53, 136000)
    >>> x.date.weekday()
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    AttributeError: 'builtin_function_or_method' object has no attribute 'weekday'
    >>> x.date()
    datetime.date(2012, 2, 19)
    >>> x.date().weekday()
    6
    

    问题 2:.date 是多余的

    >>> x.weekday()
    6
    

    问题 3:在我看来,x.weekday() in range(0,7) 永远是True。也许你的意思是:

    # initialisation
    NON_WEEKEND_DAYS = set(range(0, 5))
    
    # as needed
    ... x.weekday() in NON_WEEKEND_DAYS ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-06
      • 2012-07-07
      • 2012-05-02
      • 1970-01-01
      相关资源
      最近更新 更多