在列表理解中遇到生成器问题
Having trouble with generator in list comprehension
我正在尝试在 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
s 作为 takewhile
的第一个参数。你正在用两个参数对 takewhile
进行函数调用,这需要在生成器周围加上括号,所以如果你真的想这样做,你必须写:
takewhile(((lambda x: x % d) for d in [3,5,7] == 0), range(0,n))
您需要将生成器表达式放在 lambda
函数中的括号中,我认为您还需要检查 x % d
的结果是否等于零:
lambda x: (x % d==0 for d in [3,5,7])
我正在尝试在 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
s 作为 takewhile
的第一个参数。你正在用两个参数对 takewhile
进行函数调用,这需要在生成器周围加上括号,所以如果你真的想这样做,你必须写:
takewhile(((lambda x: x % d) for d in [3,5,7] == 0), range(0,n))
您需要将生成器表达式放在 lambda
函数中的括号中,我认为您还需要检查 x % d
的结果是否等于零:
lambda x: (x % d==0 for d in [3,5,7])