2016-07-25 79 views
-1

我有以下簡單的Python代碼拉姆達意想不到的結果

numbers = range(1,100) 
print (list(numbers)) 
numbers_over_30 = filter(lambda x: x>>30,numbers) 
print (list(numbers_over_30)) 

我創建的數字從1到99的列表和工作正常給我

[1,2,3,4,5.....97,98,99] 

第二列表應該給我

[31,32,33....97,98,99] 

但我只得到一個空的列表[]

如果我改變lambda函數,我得到如下:

x>>5 gives me [32,33,34...97,98,99] 
x>>4 gives me [16,17,18...97,98,99] 
x>>3 gives me [8,9,10...97,98,99] 

任何人都可以擺脫什麼lambda函數做一些輕?我預計numbers_over_30將包含x>>30爲真的所有數值。

我確定有更好的方法來做到這一點,但我特別試圖通過CodeAcademy單元使用過濾器和lambda來實現結果,所以我只是想了解發生了什麼。

+2

你的變量稱爲'numbers_over_30'但過濾無關這一點。 '>>'是一個按位操作。 – TigerhawkT3

+0

'>>'是一個二進制移位操作。它過濾掉所有少於30位的數字。 –

+0

我投票結束爲一個錯字。如果完全是這樣,你可以刪除問題。 – TigerhawkT3

回答

0

你只需要刪除一個>,那麼你的代碼將是:

numbers = range(1,100) 
print (list(numbers)) 
numbers_over_30 = filter(lambda x: x>30,numbers) # here your error 
print (list(numbers_over_30)) 
+0

這不會在舊的答案中添加新的或有用的信息。事實上,它的信息較少,沒有解釋發生了什麼。 – TigerhawkT3