gpt4 book ai didi

python - 在列表理解中遇到生成器问题

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:34:04 24 4
gpt4 key购买 nike

我正在尝试在 codefights 中完成一项挑战,但我似乎被困在了:

SyntaxError: Generator expression must be parenthesized if not sole argument

当我执行

def magicNumber(n):
return [i for i in itertools.takewhile
(lambda x: x % d for d in [3,5,7] == 0, range(0,n))]

挑战是:考虑只有 3、5 和 7 的质因数。编写程序找出其中第 n 大的数。

示例输出:

  • 对于n = 1,输出应该是:1 (3^0 * 5^0 * 7^0)
  • 对于 n = 2,输出应为:3 (3^1 * 5^0 * 7^0)
  • 对于 n = 6,输出应为:15(3^1 * 5^1 * 7^0)

我知道我离解决这个问题还很远,我只是想知道这里的问题是什么。

最佳答案

您需要添加括号:

takewhile(lambda x: (x % d for d in [3,5,7] == 0), range(0,n))

请注意,您的原始代码被解析为:

takewhile((lambda x: x % d) for d in [3,5,7] == 0, range(0,n))

即解析器认为您正在创建生成器,生成 lambda 作为 takewhile 的第一个参数。你正在用两个参数调用 takewhile 函数,这需要在生成器周围加上括号,所以如果你真的想这样做,你必须写:

takewhile(((lambda x: x % d) for d in [3,5,7] == 0), range(0,n))

关于python - 在列表理解中遇到生成器问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33540491/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com