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 に答える