2017-04-09 52 views
1

我有這一位的做法代碼:LAMBDA與地圖()如果條件

even = [] 
odd = [] 

for x in range(1000): 
    if x % 2 != 0: 
     odd.append(x) 
    else: 
     even.append(x) 

print map(lambda x: x if str(x)[-1] == '2' else pass, even) 

print even 
print odd 

在我的腦海裏,我應該得到在0奇數結束完整列表 - 999範圍和名單來自相同範圍的不以「2」結尾的偶數。然而,在實踐中,我一直在指出lambda表達式中的「pass」的語法錯誤。

我在這裏做錯了什麼?

乾杯, Greem

+0

你做馬額外工作王一串。嘗試'x%10 == 2' –

回答

1

pass是聲明瞭,但是內嵌if,作爲一個經營者,需要其操作數是表達式。 map實際上不能從序列中刪除元素,但filter(返回只包含了函數返回True值一個新的列表):

print filter(lambda x: str(x)[-1] == '2', even) 
0

如果你像我一樣,不喜歡的過濾器和lambda,你可以使用Python list comprehension做到這一點:

print [x for x in even if str(x)[-1] == '2'] 
0
even = [] 
odd = [] 

for x in range(1000): 
    if x % 2 != 0: 
     odd.append(x) 
    else: 
     even.append(x) 

print (filter(lambda x: str(x)[-1] == '2', even)) 

print (even) 
print (odd) 

將在巨蟒-3太工作..