我正在尝试在 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/