不使用 next() 迭代列表

use*_*673 5 python iteration loops pyscript

我有一个名为 current_month_list 的列表,每个月都会填充该月的星期一。即六月份将是:

current_month_list = 6, 13, 20, 27
Run Code Online (Sandbox Code Playgroud)

我在用着

next_rubbish_day = next(x for x in current_month_list if x > todays_date.day)
Run Code Online (Sandbox Code Playgroud)

返回列表中的下周一,即 20 作为今天的 16

这运作良好,但我试图转换为 Pyscript,它在不同的环境中使用它,显然(在另一个网站上引用)'

pyscript 包含一个异步 python 解释器,并且没有实现在解释器中特别困难的某些功能。其中包括发电机。

我得到的错误是

未实现 ast ast_generatorexp

所以我的问题是,是否有另一种方法来编码。我不太擅长 python,所以希望得到一些帮助。谢谢你的期待。

Pra*_*adi 0

由于生成器被禁止,因此只需回到常规循环即可。next()将返回该生成器表达式中的下一项,并且由于您刚刚创建了生成器,因此这将是第一项。因此,一旦你有了第一个项目,就可以跳出循环:

for x in current_month_list:
    if x > todays_date.day: 
        next_rubbish_day = x
        break 
Run Code Online (Sandbox Code Playgroud)

现在,如果;x > todays_date.day中没有任何一个,这段代码将不会抛出任何错误。current_month_list你的原始代码会抛出StopIteration异常。要实现此功能,您只需使用以下for..else形式

for x in current_month_list:
    if x > todays_date.day: 
        next_rubbish_day = x
        break 
else:
    # This code runs only if the loop finishes without being broken
    raise StopIteration()
Run Code Online (Sandbox Code Playgroud)

据我所知,该片段的行为与您的next(...)声明相同。