更改代码以列出理解

Var*_*run 0 python

我已经为Python中的一个简单问题编写了以下代码 -

def Peu1(numbers):
    "Sum of all the multiples of 3 or 5 below 1000."
    for num in range(numbers):
        if num%3 == 0 or num%5 == 0:
            test = sum(range(numbers),0)
        return test

print Peu1(1000)
Run Code Online (Sandbox Code Playgroud)

我想将它改为List comprehension,我写了以下内容 -

test = [sum(range(numbers),0) for num in range(numbers) if num%3 == 0 or num%5 == 0]
print test
Run Code Online (Sandbox Code Playgroud)

但是我的列表理解是在循环中打印结果,我的意思是我得到的结果是n次(mod 3或5).请查明错误并指导.

Gar*_*tty 6

列表理解旨在建立一个列表 - 如果你不这样做,那么你不需要使用它.

但是,您可以在函数内使用列表推导或生成器表达式来生成要使用的数字列表:

sum(num for num in range(numbers) if num%3 == 0 or num%5 == 0)
Run Code Online (Sandbox Code Playgroud)

请注意,这numbers是一个误导性的变量名称 - 它意味着它包含数字范围,我建议传递数字范围,或者调用它highest或其他东西.

有些人不是使用或具有相同的价值,而是发现if 0 in {num%3, num%5}个人更清楚的东西,我认为在这种情况下它会略微模糊一些含义.

  • 对于rubik所说的+1 - 在这种情况下有很多方法可以替换`或'操作,例如``not all({num%3,num%5})` - 它只是用等效操作替换逻辑.如果有疑问,坚持明显.可读性优于短期. (3认同)