2013-03-10 36 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

相關問題