apply map及函式工具 list的再構造

2021-08-29 14:30:57 字數 2232 閱讀 7775

2007-07-28 16:37

首先來複習python中函式的定義。在python中,有兩種方式可以用來定義乙個函式。用def可以定義有名字的函式。用lambda可以定義匿名函式。由於在實際呼叫乙個函式時,實參的個數可能是乙個也可能是兩個,還可能是多個。因此在形參前面加上*或**來處理這個情況。比如:

def test(*x):

if len(x)>0:

for c in x:

print c

else:

print none

上面定義的函式的功能是把引數乙個乙個打出來(通過print),這個函式可以使用沒有實參的形式呼叫,比如:test();也可以使用乙個實參的形式呼叫,比如:test(4);還可以以多個實參的形式呼叫,比如:test(1,2,3,4)。但不管是哪種方式,在呼叫的時候實際引數的個數都已經確定下來了,乙個就是乙個,兩個就是兩個。現在假設在乙個程式中有乙個list,比如叫userinput,這個list中的成員是由使用者在使用程式時互動確定的,在執行中可能有乙個成員,也可能有多個成員,這一切都要看使用者怎麼操作。現在要用test函式把userinput打出來。那麼使用下面這個形式是不行的:

這只會把userinput作為乙個整體打出來,比如說使用者選擇後userinput=[1,2],那麼打出來的是[1,2],而我們想要的結果是:12

這種形式的。很自然的,可能會想到應該用乙個for迴圈:

for c in userinput:

test(c)

map實際上是python中一大類函式的乙個代表,這類函式可以被稱為函式工具。常用的函式中,同類的還有filter和reduce。先來看filter:

它返回乙個序列型別的值。表示把seq中的每個成員依次代入function中,如果為真則它將成為返回序列中的乙個成員。filter函式類似於:

res = list()

for x in seq:

if func(x):

res如果filter的第乙個實參為none,則表示把seq的中真值挑出來。

再來看reduce函式:

表示把sequence按照function提供的規則進行計算,最後算出乙個值來。這個function必須具有兩個引數,比如:

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

reduce((lambda x,y: x*y),l) ===> 120

這就相當於把乘法應用於l的各個成員中,也就是1*2*3*4*5。reduce的第三個引數表示乙個初始值。即初始值*1*2*3*4*5。python中有乙個叫operator的模組,其中提供了很多操作,比如加法叫add,乘法叫mul。上面的這一小段**可以寫成:

import operator

l = range(6)[1:]

reduce(operator.mul, l)

從上面介紹可以看出,map、filter或者reduce實際都是對序列型別資料的成員進行操作。由於這種操作在python是非常普遍的,因此在python 2.0後提供了一種叫"list的再構造"(英文名叫list comprehansions,不知道怎麼翻合適)的語法形式來進行類似的操作。假設l = [1,2,3,4],那麼:map((lambda x: x**2), l)就可以寫成:[x**2 for x in l]。這就是所謂的

"list的再構造"

。認真來看看這個:

首先,這個表示式用括起來了,表示這個表示式返回的結果是乙個list。其次,後面一部分,也就是for x in l,很明顯是把l中的成員依次取出來。第三,前面一部分,也就是x**2,表示對x的操作是"平方"。然後以每次計算後的值作為目標list的成員。其實可以把這一部分看成是目標list的「通項公式」,通過對這個「通項公式」代入不同的值,可以得到不同的結果。而這個「不同的值」就是由後面的部分,即for x in l,確定的。

當然大名頂頂的"list再構造"還有別的功能,它可以加上條件從句(if語句),比如:

"list再構造"還可以巢狀for這一部分,比如:

相當於:

res =

for x in l:

for y in l:

res當然,巢狀for的"list再構造"也可以加上條件判斷。比如:

這個式子已經相當複雜,因此在以程式可讀性著稱的python世界中,最好不要使用這種東西。不過,也可見用「list再構造」也可以實現for或者map和filter的功能,但是list再構造的效率最高,其次map、filter這些內建函式,再次才是for。

類別:python |

100) |

twisted的網路通訊模型

li函式在python python 函式

1.概念 由若干條語句組成的語句塊,他的組織 是 的最小單元 完成一定的功能 2.作用 最基本的封裝,按照功能組織一段 可以復用,減少 量 簡潔美觀,更易懂 3.函式的分類 內建函式 max 庫函式 match.ceil 自定義函式 使用def關鍵字定義 4.定義 函式名縮排 return 沒有預設...

div內li標籤間距 li標籤的間距問題及編碼方式

新建乙個簡單的html測試檔案,下面來測試ul li標籤 example source code 測試一,定義css為如下 效果如下 example source code body ulul li ul li a 發現在ie5和ie5.5下左邊都產生了空白,並且在ie5下,li之間的行距產生空白,...

jQuery所有工具函式及兩個屬性。

browser屬性 browser屬性是乙個屬性,可用於客戶端嗅探。瀏覽器為ie,該物件會擁有乙個msie屬性,值為true。如果是firefox與其相關,會有乙個值為true的mozilla屬性。還有乙個瀏覽器版本號,version屬性。contains 接收兩個文件元素作為引數。如果第乙個元素包...