python 內建函式zip map filter

2022-08-12 09:36:11 字數 3355 閱讀 1229

內建函式

一、zip

zip()是python的乙個內建函式,它接受一系列可迭代的物件作為引數,將物件中對應的元素按順序組合成乙個tuple,zip的作用:壓縮任意多個[0,n]引數,形成新的復合元組

a, b = [0, 1], [2, 3]

ab =zip(a, b)

print

(list(ab))

#[(0, 2), (1, 3)]

每個tuple中包含的是原有序列中對應序號位置的元素,然後返回由這些tuples組成的list。若傳入引數的長度不等,則返回list的長度和引數中長度最短的物件相同。

a = [1,2,3]

b = [4,5,6]

c = [4,5,6,7,8]

zipped =zip(a,b,c)

print

(list(zipped))

#[(1, 4, 4), (2, 5, 5), (3, 6, 6)]

l1 = ['

a','

b','

c','

e','

f','g'

]l2 = [1,2,3]

l3=['

a','

b','c'

]l4=['

牛','

牛','

niu']#

zip,就是把倆list,合併到一起,如果想同時迴圈2個list的時候,

for a,b,c,d in

zip(l1,l2,l3,l4):

print

(a,b,c,d)

#結果

#a 1 a 牛

#b 2 b 牛

#c 3 c niu

在所有引數長度相同的情況下,zip()與map()類似,沒有引數的情況下zip()返回乙個空list。

a = [1,2,3]

b = [4,5,6]

c = [4,5,6,7,8]

zipped =zip(a,b,c)

print

(list(zipped))

print

(list(zipped))

#結果:

#[(1, 4, 4), (2, 5, 5), (3, 6, 6)]

#

編寫過示例**之後會發現zip()之後的結果只能「使用一次」。如**示例中所寫,第二次使用list(ab_zip_obj))輸出ab_zip_obj的內容是,這是為什麼呢?檢視python3提供zip()的源**,zip()實際上是乙個生成器物件,故使用list()獲取zip()結果時,已經相當於是完成一次迭代遍歷,第二次再次使用list()時迭代已經結束,所以返回

二、map:

map函式會根據提供的函式對指定序列做對映。

map函式的定義:map(function, sequence[, sequence, ...]) -> list

通過定義可以看到,這個函式的第乙個引數是乙個函式,剩下的引數是乙個或多個序列,返回值是乙個集合。

function可以理解為是乙個一對一或多對一函式,map的作用是以引數序列中的每乙個元素呼叫function函式,返回包含每次function函式返回值的list。

print(list(map(lambda x: x ** 2, [1, 2, 3, 4, 5])))
#

返回結果為:

#[1, 4, 9, 16, 25]

def

my(num):

return

str(num)

lis = [1,2,3,4,5,6,7,8,9]

res = list(map(my,lis))#

map引數第乙個是函式名,第二個是要迴圈的內容,返回結果是個map object位址,所以要用list強制轉換下

print(res)#

最終會將lis中的內容迴圈呼叫my函式,res=['1','2','3','4','5','6','7','8','9']

def

my(num1,num2):

return

(num1,num2)

lis = [1,2,3,4,5]

lis1=['

a','

b','

c','d'

]res = list(map(my,lis,lis1))#

map引數第乙個是函式名,剩下的是要迴圈的內容,函式有幾個引數,就要寫入幾個變數,返回結果是個map object位址,所以要用list強制轉換下

print(res)#

最終會將lis和lis1中的內容迴圈呼叫my函式,res=[(1,'a')(2,'b')(3,'c')(4,'d')]

三、filter

filter和map表面上看是一樣的,都是迴圈呼叫函式,區別在於:filter是帶有過濾性的,它會將要迴圈的內容代入函式後,結果為真的對應的內容返回

filter函式的定義:filter(function or none, sequence) -> list, tuple, or string

function是乙個謂詞函式,接受乙個引數,返回布林值true或false。

filter函式會對序列引數sequence中的每個元素呼叫function函式,最後返回的結果包含呼叫結果為true的元素。

返回值的型別和引數sequence的型別相同

def

is_even(x):

return x & 1 !=0

print(list(filter(is_even, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])))

#[1, 3, 5, 7, 9]

def

even(num):

if num%2==0:

return

true

return

false

lis = [1,2,3,4,5,6,7,8,9]

res =filter(even,lis)

print('

filter..

',list(res)) #

filter只保留,返回為真的資料。將lis迴圈滴入even函式後,能夠返回true的lis中的資料,會被列印出來,所以最終結果就是2,4,6,8

#如果改程式用map的話,函式返回什麼就會列印什麼,最終結果是false,true,false,true.....

python重寫內建函式 python 內建函式

說明 zip 函式用於將可迭代的物件作為引數,將物件中對應的元素打包成乙個個元組,然後返回由這些元組組成的列表。如果各個迭代器的元素個數不一致,則返回列表長度與最短的物件相同,利用 號操作符,可以將元組解壓為列表。語法 zip iterable1,iterable2,引數 iterable 乙個或多...

python內建函式簡稱 Python內建函式詳解

此文參考python文件,然後結合自己的理解,寫下來,一方面方便自己,讓自己好好學習,順便回憶回憶 另一方面,讓喜歡的盆友也參考一下。經查詢,3.6版本總共有68個內建函式,主要分類如下 數 算 7個 型別轉換 24個 序列操作 8個 物件操作 9個 反射操作 8個 變數操作 2個 互動操作 2個 ...

python內建函式使用 python內建函式使用

eval函式執行python表示式,有返回值 eval 1 2 3 4 5 exec函式執行的是python語句,沒有返回值 exec print 123 將字串型別的 編碼.物件能夠通過exec語句來執行或者eval 進行求值,c只是編譯,不執行 code for i in range 10 pr...