这个列表推导式有什么问题 (SyntaxError: invalid syntax)?

4

遇到了一个应该是“小菜一碟”的LC问题,有些困惑。

以下是代码片段:

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出现了“SyntaxError: invalid syntax error”的错误。但我认为它看起来没问题...

这段代码有什么问题吗?

2个回答

8

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

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

呃!我要走开去站在角落里了。感到非常羞愧 :) - Homunculus Reticulli
6
选择一个阳光明媚的角落,放上鸡尾酒伞。 - Karoly Horvath

1
除了语法错误外,你在那行代码中还有三个问题。鉴于 x 看起来是一个 datetime 对象:
问题1: 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

问题三:在我的看法中,x.weekday() in range(0,7) 总是会是 True。也许你的意思是:

# initialisation
NON_WEEKEND_DAYS = set(range(0, 5))

# as needed
... x.weekday() in NON_WEEKEND_DAYS ...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接