2013-03-10 73 views
1

我现在开始学习python,我遇到了过滤器函数的问题。如何在python中使用过滤器函数33

如果我运行

list=list(range(10)) 

def f(x): return x % 2 != 0 

print(((filter(f,list)))) 

我会得到的结果是

filter object at 0x00000000028B4E10 

Process finished with exit code 0 

如果我修改代码以

list=list(range(10)) 

def f(x): return x % 2 != 0 

print(list(filter(f,list))) 

结果我得到的将是

Traceback (most recent call last): 
    File "C:/Users/Vo Quang Hoa/PycharmProjects/HelloWorld/Hello.py", line 6, in <module> 
    print(list(filter(f,list))) 
TypeError: 'list' object is not callable 

Process finished with exit code 1 

发生了什么。如何获取列表1 3 5 7 9 感谢您的帮助。

回答

2

您的主要问题是您打电话给您的list变量,um,list。您不能使用与其他对象相同的名称!另外调用你的列表,和/或使用命名约定,如上骆驼案例;

Fred=list(range(10)) 

def f(x): return x % 2 != 0 

print(list(filter(f,Fred))) 
+1

Python PEP 8样式指南建议您使用lower_case_with_underscores作为本地名称。 – 2013-03-10 12:09:48

+0

@MartijnPieters:真(对不起,那应该是真的)。如果你的名字中只有一个单词,那么这会导致'list',而'List'不会与内建的相冲突。但我同意这会令人非常困惑。 – cdarke 2013-03-10 12:13:37

+0

在*正常*代码中,您可能会想出比'list'更好的名称。在这种情况下,或许'range_list'就足够了。 – 2013-03-10 12:15:13

3

您将其更名为list,并给它一个不同的值。不要这样做,你会隐藏内置类型。改变你的代码中使用不同的名称来代替:

some_list = list(range(10)) 

def f(x): return x % 2 != 0 

print(list(filter(f, some_list))) 

然后filter()作品就好了。

+0

哦,我是noob。谢谢你的帮助。 – 2013-03-10 12:07:50

相关问题