2016-07-25 83 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