python filter 過濾序列

2021-08-15 14:01:12 字數 1605 閱讀 3899

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...