當我用下面的代碼列表理解和%功能
[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'
是什麼意思?
謝謝。
在你的榜樣,%
是modulo operator。 a % b
返回a/b
的其餘部分。
所以在你的榜樣,循環經過:
[-9, -7, -5, -3, -1, 1, 3, 5, 7, 9]
-9 % 3
等於0,因爲-9是被3整除,所以沒有餘。然而,5 % 3
返回2,因爲3一次變爲5,而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」,是因爲這不是模運算符。那是string formatting。文檔將會比我更好地解釋它:p。恰巧%
也被使用。
i%3
是將i
除以3的餘數。然而,它由not
運算符轉換爲布爾值(真/假)值; python通過使0 false
和任何其他數字true
來做到這一點。所以not i%3
是真的,只要i%3
是0;換句話說,當i
可以被3整除。
range(-9,10,2)
產生從-9開始的整數,遞增2,只要它們小於10即換句話說,-9和+9之間的奇數整數。因此,該組合是選擇奇數-9和+9之間被3整除,這恰恰是整數你展示(-9, -3, 3, 9)
mylist = []'是多餘的。我正在刪除它 – jamylak