回覆列表
-
1 # 野生演算法協會
-
2 # 資料鍊金術師
可能是對filter的返回規則不熟悉造成的
它返回的是,篩選滿足條件為True的實際變數值的迭代器,而不是True或False這兩個布林值。
注意:py2.7返回的是list列表,py3.X返回的是迭代器
這個函式的兩個引數,需要解釋一下第一個引數,要求是一個函式,比如你這個自定義的帶變數引數的函式prime
第二個引數,是作為你這個自定義函式的變數輸入的序列或迭代器,比如你的這個range(1,100)
其實你如果想要返回布林值可能根本用不到filter這個函式
應該只需要把下面的列表生成器改為:
L = [ prime(i) for i in range(1,100) ]
即可實現你想要的效果
最後建議同時關注map函式map用法與其類似
而且py2和py3返回規則也不一樣
內建函式filter()
描述:filter() 函式用於過濾序列,過濾掉不符合條件的元素,返回由符合條件元素組成的新列表。
該接收兩個引數,第一個為函式,第二個為序列,序列的每個元素作為引數傳遞給函式進行判斷,然後返回 True 或 False,最後將返回 True 的元素放到新列表中。
過濾器,構造一個序列,等價於:[ item for item in iterables if function(item)]
在函式中設定過濾條件,逐一迴圈迭代器中的元素,將返回值為True時的元素留下,形成一個filter型別資料。
語法:filter(function, iterable)
引數:
function -- 判斷函式。
iterable -- 可迭代物件。
可以看我前期文章,63個內建函式的詳細應用