A. python3.3的fliter()函數

python3 起,抄filter 函數返回的對象從列表改為 filter object(迭代器),
想要使用的話加上list(),將迭代器轉換成列表,例如:
list1= [1, 4, 6, 7, 9, 12, 17]
def is_odd(x):
return x % 2 == 1
print(list(filter(is_odd,list1)))

B. python問題: filter+無限生成器,循環filter

  • 前面的問題我已經在另外的提問里答過了

  • 根據你最新的追問,「為什麼it=filter(lambda x : x%n>0 ,it)不行??「直接在filter里用Lambda表達式是完全可以的,你的原因是你的Lambda表達式漏輸入了一個n,請看如下形式.

#Python2.x下需導入itertools庫的ifilter才能和python3.x的filter等效
importitertools
def_odd_iter():
n=1
whileTrue:
n=n+2
yieldn
def_not_divisible(n):
returnlambdax:x%n>0
defprimes():
yield2
it=_odd_iter()
whileTrue:
n=next(it)
yieldn
#it=itertools.ifilter(_not_divisible(n),it)
it=itertools.ifilter(lambdax,n=n:x%n>0,it)
forninprimes():
ifn<1000:
print(n)
else:
break

C. python 中用filter求素數的時候,這里的篩選函數是什麼意思

首先定義一個函數判斷是否為素數,如果這個數能被2~它的平方根中內的任一數整除的話它就不容是素數,否則就是素數。用flag為0或1標記,利用filter()篩掉flag為0的非素數。

#!/usr/bin/envpython
#coding:utf-8
importmath
deffilter_prime(n):#定義filter_prime函數
flag=1#設置flag,初始化為1
foriinrange(2,int(math.sqrt(n)+1)):#取2至平方根的數
ifn%i==0:#判斷是否是素數
flag=0#如果不是,flag設為0
ifflag==1:#退出循環後判斷flag,若為1(素數),則返回
returnn

printfilter(filter_prime,range(1,101))#filter1-100里的非素數

D. python中的filter()函數怎麼用特別是一個函數有多個輸入參數時。

map是把函數調用的結果放在列表裡面返回,它也可以接受多個 iterable,在第n次調用function時,將使用iterable1[n], iterable2[n], ...作為參數。

filter(function, iterable)
這個函數的功能是過濾出iterable中所有以元素自身作為參數調用function時返回True或bool(返回值)為True的元素並以列表返回.

def f_large_than_5(x):
return x > 5

filter(f_large_than_5, range(10))

>>[6,7,8,9]

E. 關於python中的取余和filter函數

把print(f(l))這句去掉就可以了,list類型不能和int類型進行運算

F. python程序,filter函數,2.7環境與3.1環境的不同

3.x 返回的是一個iter obj,如果想返還【】,要加上list()

>>> list(filter(bigger_than_five,[1,10]))
[6, 7, 8, 9, 10]

其實3.x裡面,達到你的這個目的的最簡單的方法就直接:
>>> [x for x in range(11) if x > 5]
[6, 7, 8, 9, 10]

G. 在python中,使用filter語句實現

我感覺這個場景不應該用 filter 來實現

因為 filter 做過濾的依據是序列中的元素內容

而這個場景的過濾依據的是元素出現的次序


如果一定要用 filter 也不是不可以,只是非常的別扭……

deffunc(lst):
whilelen(lst)>1:
lst=zip(*filter((lambdai:i[0]%2),enumerate(lst)))[1]
returnlst[0]iflstelseNone

printfunc([0,1,2,3,4,5,6,7,8,9])
#>>7

H. python中的filter函數怎麼用

filter()函數是 Python 內置的另一個有用的高階函數,filter()函數接收一個函數 f 和一個list,這個函數 f 的作用是對每個元素進行判斷,返回 True或 False,filter()根據判斷結果自動過濾掉不符合條件的元素,返回由符合條件元素組成的新list。
例如,要從一個list [1, 4, 6, 7, 9, 12, 17]中刪除偶數,保留奇數,首先,要編寫一個判斷奇數的函數:
def is_odd(x):
return x % 2 == 1

然後,利用filter()過濾掉偶數:
>>>filter(is_odd, [1, 4, 6, 7, 9, 12, 17])

結果:
[1, 7, 9, 17]

利用filter(),可以完成很多有用的功能,例如,刪除 None 或者空字元串:
def is_not_empty(s):
return s and len(s.strip()) > 0
>>>filter(is_not_empty, ['test', None, '', 'str', ' ', 'END'])

結果:
['test', 'str', 'END']

注意: s.strip(rm) 刪除 s 字元串中開頭、結尾處的 rm 序列的字元。
當rm為空時,默認刪除空白符(包括'\n', '\r', '\t', ' '),如下:
>>> a = ' 123'
>>> a.strip()
'123'
>>> a = '\t\t123\r\n'
>>> a.strip()
'123'
練習:
請利用filter()過濾出1~100中平方根是整數的數,即結果應該是:
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
方法:
import math
def is_sqr(x):
return math.sqrt(x) % 1 == 0
print filter(is_sqr, range(1, 101))

結果:
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

I. python中的filter函數怎麼用

  1. python filter內建函數

filter函數是python內建函數,可以操作任何可迭代類型,如list,tuple,string.

filter需要帶上一個函數function和一個可迭代序列作為參數。filter()將調用該function作用於每一個可迭代序列的元素,並返回一個由該function驗證後返回值為true的元素組成新的可迭代序列,新序列的類型保持與filter參數序列的類型一致

2.filter與數字

下面用這個例子來說明:

#建個數字列表
numbers=[1,5,9,8,4,6,3,7]
#定義一個過濾標准,取小於5的數
deflessThanFive(element):
returnelement<5
printfilter(lessThanFive,numbers)
輸出結果是列表:[1,4,3]

解說:此處的過濾函數lessThanFive必需帶入一個參數(filter()會調用lessThanFive,參數是列表nembers中的每一個元素,一次一個)。filter()返回所有值都是小於5的列表

3.filter與字元串

下面用如下例子說明:

#定義元組類型
names=('Jack','Jill,'Steve','')
#篩選出名字
new_names=filter(None,names)
printnew_names
輸出結果是元組:
('Jack','Jill,'Steve')

在元組names最後一個名字是空字元串,而filter的第一個參數是None,這說明需要使用identity函數(該函數是簡單的返回該元素的)

因為python對空字元串,0和None作為False,所以上面的filter的語句就是移除空元素。

4.filter和函數

目的:找出以J開頭的名字

defstartsWithJ(element):
ifelement:
returnelement[0]=='J'
returnFalse
j_names=filter(startsWithJ,names)
printj_names
輸出結果是元組:('Jack','Jill')

注意到了嗎,上面的2個結果都是tuple而不是list,再一次說明fliter的返回值類型與參數序列的類型保持一致

J. python filter函數

  • 不會死循環,生成器是個虛擬抽象的概念,你可以認為_odd_iter()primes() 裡面運行的時候

  • python解釋器並不生成實際的List,也就不會耗費內存和時間

  • 真正分配給List內存只在以下過程, primes()這個生成器是逐步分配內存的!!

forninprimes():
ifn<1000:
print(n)
else:
break
  • 另外提醒你下,你的程序只能在Python 3.x版本下正確運行:-)因為你用的是 filter返回生成器對象的用法!!如果你要你的程序在Python 2.x正確運行,需改成如下形式。

  • 根據你最新的追問,「為什麼it=filter(lambda x : x%n>0 ,it)不行??「直接在filter里用Lambda表達式是完全可以的,你的原因是你的Lambda表達式漏輸入了一個n,請看如下形式.

#Python2.x下需導入itertools庫的ifilter才能和python3.x的filter等效
importitertools
def_odd_iter():
n=1
whileTrue:
n=n+2
yieldn
def_not_divisible(n):
returnlambdax:x%n>0
defprimes():
yield2
it=_odd_iter()
whileTrue:
n=next(it)
yieldn
#it=itertools.ifilter(_not_divisible(n),it)
it=itertools.ifilter(lambdax,n=n:x%n>0,it)
forninprimes():
ifn<1000:
print(n)
else:
break