2009-11-12 21 views
2
M = [[1,2,3], 
    [4,5,6], 
    [7,8,9]] 

col2 = [row[1] + 1 for row in M if row[1] % 2 == 0] 
print (col2) 

輸出:[3, 9]過濾奇數

我期待它過濾掉奇數,但它確實是相反的。

+0

如果您在將來發布您的預期輸出將有所幫助 – 2009-11-12 08:02:12

回答

6

代碼正在執行您所期望的操作 - 如果第二項是偶數,則將其增加1並將其放入列表中。

因此,對於第一行,它看到2%2 == 0爲真,並設置col2 [0] = 2 + 1 = 3.對於第二行,5%2 == 0爲False。對於第三行,8%2 == 0爲True,和COL2 [1] = 8 + 1 = 9。

+0

哦,所以它首先讀取IF語句?我認爲陳述是左傾的? – 3zzy 2009-11-12 04:48:33

+1

是 - 列表解析允許for循環之後的多個條件,並且在考慮所有這些條件之後評估左邊的表達式。 (技術解釋:http://docs.python.org/reference/expressions.html#list-displays) – 2009-11-12 04:59:27

0

您正在測試row[1]%2,但印刷row[1]+1
所以當row[1]==2,它是偶數,但你被追加3到結果
row[1]==5,奇怪的是,讓你篩選出來
row[1]==8,甚至,但要附加9到結果

2

我相信你需要切換的比較從== 0== 1

當它是奇數時,任何數除以2的模數爲0或1,1。

+0

嗯..不是真的。我試過這個:對於範圍(10)中的n:n = n%2並且它將ODD打印爲'0' – 3zzy 2009-11-12 05:17:30

0
M = [[1,2,3], 
    [4,5,6], 
    [7,8,9]] 
col2 = [] 

for row in M: 
    if row[1]%2 == 1: 
     col2.append(row[1]) 
print col2