2013-06-23 63 views
3

當我用下面的代碼列表理解和%功能

[i for i in range(-9, 10, 2) if not i%3)] 

它給

> (-9, -3, 3, 9) 

爲什麼沒有給出這個問題的答案? 'i%3'是什麼意思?

謝謝。

+0

mylist = []'是多餘的。我正在刪除它 – jamylak

回答

5

在你的榜樣,%modulo operatora % 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,則認爲它是Truenot是一個布爾運算符,它獲取布爾值的負值。所以not TrueFalse(和not False is True)。

0被認爲是False,所以如果i % 3 == 0,那麼i將被包括在新列表中。


現在,之所以print("%s %s", ("hello", "world"))輸出「Hello World」,是因爲這不是模運算符。那是string formatting。文檔將會比我更好地解釋它:p。恰巧%也被使用。

+0

優秀!謝謝haidro :) – Emma

+0

@Emma不客氣:) – TerryA

2

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)

+0

因此'%'的定義是它是分隔符? – Emma

+0

@Emma它實際上被稱爲模運算符。有一節[在文檔中](http://docs.python.org/2/reference/expressions.html#binary-arithmetic-operations) – TerryA

+0

@Haidro感謝文檔 – Emma