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]
過濾奇數
我期待它過濾掉奇數,但它確實是相反的。
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]
過濾奇數
我期待它過濾掉奇數,但它確實是相反的。
代碼正在執行您所期望的操作 - 如果第二項是偶數,則將其增加1並將其放入列表中。
因此,對於第一行,它看到2%2 == 0爲真,並設置col2 [0] = 2 + 1 = 3.對於第二行,5%2 == 0爲False。對於第三行,8%2 == 0爲True,和COL2 [1] = 8 + 1 = 9。
哦,所以它首先讀取IF語句?我認爲陳述是左傾的? – 3zzy 2009-11-12 04:48:33
是 - 列表解析允許for循環之後的多個條件,並且在考慮所有這些條件之後評估左邊的表達式。 (技術解釋:http://docs.python.org/reference/expressions.html#list-displays) – 2009-11-12 04:59:27
您正在測試row[1]%2
,但印刷row[1]+1
所以當row[1]==2
,它是偶數,但你被追加3
到結果
時row[1]==5
,奇怪的是,讓你篩選出來
當row[1]==8
,甚至,但要附加9
到結果
我相信你需要切換的比較從== 0
到== 1
。
當它是奇數時,任何數除以2的模數爲0或1,1。
嗯..不是真的。我試過這個:對於範圍(10)中的n:n = n%2並且它將ODD打印爲'0' – 3zzy 2009-11-12 05:17:30
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
如果您在將來發布您的預期輸出將有所幫助 – 2009-11-12 08:02:12