簡體   English   中英

列表理解中的生成器出現問題

[英]Having trouble with generator in list comprehension

我正在嘗試打一場代碼戰中的一項挑戰,但我似乎仍然堅持:

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))

您需要將生成器表達式放在帶括號的lambda函數中,而且我認為您還需要檢查x % d的結果是否等於零:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM