0

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

我想将其更改为列表理解,我写了以下内容 -

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

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

4

1 回答 1

6

列表推导旨在建立一个列表——如果你不这样做,那么你就不需要使用一个。

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

sum(num for num in range(numbers) if num%3 == 0 or num%5 == 0)

请注意,这numbers是一个误导性的变量名称 - 这对我来说意味着它包含数字范围,我建议要么传入数字范围,要么调用它highest或其他东西。

有些人没有使用相同的值,而是if 0 in {num%3, num%5}觉得更清晰,我个人认为在这种情况下它有点模糊了含义。

于 2012-05-01T16:04:21.667 回答