次のコードを使用している場合
[i for i in range(-9, 10, 2) if not i%3)]
それは与えます
> (-9, -3, 3, 9)
なぜその答えを与えるのですか?とは'i%3'
どういう意味ですか?
ありがとうございました。
次のコードを使用している場合
[i for i in range(-9, 10, 2) if not i%3)]
それは与えます
> (-9, -3, 3, 9)
なぜその答えを与えるのですか?とは'i%3'
どういう意味ですか?
ありがとうございました。
あなたの例で%
は、モジュロ演算子です。a % b
の残りを返しますa / b
。
したがって、あなたの例では、ループが通過します:
[-9, -7, -5, -3, -1, 1, 3, 5, 7, 9]
-9 % 3
-9 は 3 で割り切れるため、0 に等しく、剰余はありません。ただし、5 % 3
3 は 5 に 1 回入るため、2 を返します5 - 3 == 2
。
not i % 3
少しトリッキーです。まず、i % 3
評価されます。結果が 0 より大きい場合は、 と見なされTrue
ます。not
ブール値の負の値を取得するブール演算子です。(と)もそうnot True
です。False
not False is True
0
は と見なされるFalse
ため、 の場合i % 3 == 0
はi
新しいリストに含まれます。
ここで、print("%s %s", ("hello", "world"))
「hello world」と表示されるのは、モジュロ演算子ではないためです。それが文字列フォーマットです。ドキュメントは私よりもよく説明します:p。たまたまそれ%
も使われています。