python內建的filter()函式用於過濾序列。
filter()把傳入的函式依次作用於每個元素,然後根據返回值是true還是false決定保留還是丟棄該元素
1.求素數的例子:
①先構造乙個從3開始的奇數序列:
def
_odd_iter
(): n = 1
while
true:
n = n + 2
yield n
②定義乙個篩選函式
a = lambda x: x % 10 > 0
現在a就是乙個函式
a(1) 就等價於 1 % 10 > 0
最後返回結果
def
_not_divisible
(n):
return
lambda x: x % n > 0
③定義乙個生成器,不斷返回素數
def
primes
():yield
2 it = _odd_iter() # 初始序列
while
true:
n = next(it) # 返回序列的第乙個數
yield n
it = filter(_not_divisible(n), it) # 構造新序列
這個生成器先返回第乙個素數2,然後,利用filter()不斷產生篩選後的新的序列。
由於primes()也是乙個無限序列,所以呼叫時需要設定乙個退出迴圈的條件:
for n in primes():
if n < 1000:
print(n)
else:
break
注意到iterator是惰性計算的序列,所以我們可以用python表示「全體自然數」,「全體素數」這樣的序列,而**非常簡潔。
filter()的作用是從乙個序列中篩出符合條件的元素。由於filter()使用了惰性計算,所以只有在取filter()結果的時候,才會真正篩選並每次返回下乙個篩出的元素。
例子:
#!/usr/bin/python
# -*- coding: utf-8 -*-
'''回數是指從左向右讀和從右向左讀都是一樣的數,
例如12321,909。請利用filter()濾掉非回數:
'''def
is_palindrome
(n):
#把整形轉變成為字串
n=str(n)
a=len(n)/2
if n.rfind(n[0:int(a)],len(n)-int(a),len(n))>-1:
return n
else:
pass
# 測試:
output = filter(is_palindrome, range(1, 1000))
print(list(output))
更簡單:
defis_palidrome
(n):
return str(n)==str(n)[::-1]
驗證回文串 Python filter用法
驗證回文串 filter用法 題目內容 給定乙個字串,驗證它是否是回文串,只考慮字母和數字字元,可以忽略字母的大小寫。說明 本題中,我們將空字串定義為有效的回文串。輸入1 a man,a plan,a canal panama 輸出1 true 輸入2 race a car 輸出2 falsedef...
Python filter 函式的使用
描述 filter 函式用於過濾序列,過濾掉不符合條件的元素,返回乙個迭代器物件,如果要轉換為列表,可以使用 list 來轉換。該接收兩個引數,第乙個為函式,第二個為序列,序列的每個元素作為引數傳遞給函式進行判,然後返回 true 或 false,最後將返回 true 的元素放到新列表中。語法 以下...
python filter到函式式程式設計
filter function,iterable 高階函式,可以用來過濾能迭代的物件。關鍵是可以定製自己的過濾函式。返回乙個迭代物件 python3.x import math def is sqr x return math.sqrt x 1 0 tmplist filter is sqr,ran...