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

标签 python algorithm python-2.7 list-comprehension generator-expression

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

相关文章:

python - 正则表达式或其他方式从具有变量条目的行中获取数据

python - 寻找一个工作的 linux 命令行工具从 rapidshare 下载

python - pty多路复用器

python - 在 apply 函数中使用 shift() 函数来比较 Pandas Dataframe 中的行

python - Python 中实时数据的数值积分(梯形)

algorithm - 函数的大 O 阶

algorithm - 如何找到最大边加权团?

algorithm - NLP,用于确定文本 block 是否为 "similar"的算法(已经匹配关键字后)

Python Pandas 一列数据框总和

python - 安装docker-compose时出错(def _collat​​e(* iterables,key = lambda a:a,reverse = False)