[英]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.