重慶分公司,新征程啟航
為企業(yè)提供網(wǎng)站建設(shè)、域名注冊(cè)、服務(wù)器等服務(wù)
為企業(yè)提供網(wǎng)站建設(shè)、域名注冊(cè)、服務(wù)器等服務(wù)
Python內(nèi)置函數(shù)有很多,為大家推薦5個(gè)神仙級(jí)的內(nèi)置函數(shù):
津市ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書(shū)未來(lái)市場(chǎng)廣闊!成為創(chuàng)新互聯(lián)建站的ssl證書(shū)銷(xiāo)售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18980820575(備注:SSL證書(shū)合作)期待與您的合作!
(1)Lambda函數(shù)
用于創(chuàng)建匿名函數(shù),即沒(méi)有名稱(chēng)的函數(shù)。它只是一個(gè)表達(dá)式,函數(shù)體比def簡(jiǎn)單很多。當(dāng)我們需要?jiǎng)?chuàng)建一個(gè)函數(shù)來(lái)執(zhí)行單個(gè)操作并且可以在一行中編寫(xiě)時(shí),就可以用到匿名函數(shù)了。
Lamdba的主體是一個(gè)表達(dá)式,而不是一個(gè)代碼塊。僅僅能在lambda表達(dá)式中封裝有限的邏輯進(jìn)去。
利用Lamdba函數(shù),往往可以將代碼簡(jiǎn)化許多。
(2)Map函數(shù)
會(huì)將一個(gè)函數(shù)映射到一個(gè)輸入列表的所有元素上,比如我們先創(chuàng)建了一個(gè)函數(shù)來(lái)返回一個(gè)大寫(xiě)的輸入單詞,然后將此函數(shù)應(yīng)有到列表colors中的所有元素。
我們還可以使用匿名函數(shù)lamdba來(lái)配合map函數(shù),這樣可以更加精簡(jiǎn)。
(3)Reduce函數(shù)
當(dāng)需要對(duì)一個(gè)列表進(jìn)行一些計(jì)算并返回結(jié)果時(shí),reduce()是個(gè)非常有用的函數(shù)。舉個(gè)例子,當(dāng)需要計(jì)算一個(gè)整數(shù)列表所有元素的乘積時(shí),即可使用reduce函數(shù)實(shí)現(xiàn)。
它與函數(shù)的最大的區(qū)別就是,reduce()里的映射函數(shù)(function)接收兩個(gè)參數(shù),而map接收一個(gè)參數(shù)。
(4)enumerate函數(shù)
用于將一個(gè)可遍歷的數(shù)據(jù)對(duì)象(如列表、元組或字符串)組合為一個(gè)索引序列,同時(shí)列出數(shù)據(jù)和數(shù)據(jù)下標(biāo),一般用在for循環(huán)當(dāng)中。
它的兩個(gè)參數(shù),一個(gè)是序列、迭代器或其他支持迭代對(duì)象;另一個(gè)是下標(biāo)起始位置,默認(rèn)情況從0開(kāi)始,也可以自定義計(jì)數(shù)器的起始編號(hào)。
(5)Zip函數(shù)
用于將可迭代的對(duì)象作為參數(shù),將對(duì)象中對(duì)應(yīng)的元素打包成一個(gè)個(gè)元組,然后返回由這些元組組成的列表
當(dāng)我們使用zip()函數(shù)時(shí),如果各個(gè)迭代器的元素個(gè)數(shù)不一致,則返回列表長(zhǎng)度與最短的對(duì)象相同。
NumPy是一個(gè)關(guān)于矩陣運(yùn)算的庫(kù),熟悉Matlab的都應(yīng)該清楚,這個(gè)庫(kù)就是讓python能夠進(jìn)行矩陣話的操作,而不用去寫(xiě)循環(huán)操作。
下面對(duì)numpy中的操作進(jìn)行總結(jié)。
numpy包含兩種基本的數(shù)據(jù)類(lèi)型:數(shù)組和矩陣。
數(shù)組(Arrays)
from numpy import * a1=array([1,1,1]) #定義一個(gè)數(shù)組 a2=array([2,2,2]) a1+a2 #對(duì)于元素相加array([3, 3, 3]) a1*2 #乘一個(gè)數(shù)array([2, 2, 2])## a1=array([1,2,3]) a1
array([1, 2, 3]) a1**3 #表示對(duì)數(shù)組中的每個(gè)數(shù)做平方array([ 1, 8, 27])##取值,注意的是它是以0為開(kāi)始坐標(biāo),不matlab不同 a1[1]2##定義多維數(shù)組 a3=array([[1,2,3],[4,5,6]]) a3
array([[1, 2, 3],
[4, 5, 6]]) a3[0] #取出第一行的數(shù)據(jù)array([1, 2, 3]) a3[0,0] #第一行第一個(gè)數(shù)據(jù)1 a3[0][0] #也可用這種方式1##數(shù)組點(diǎn)乘,相當(dāng)于matlab點(diǎn)乘操作 a1=array([1,2,3]) a2=array([4,5,6]) a1*a2
array([ 4, 10, 18])12345678910111213141516171819202122232425262728293031323334
Numpy有許多的創(chuàng)建數(shù)組的函數(shù):
import numpy as np
a = np.zeros((2,2)) # Create an array of all zerosprint a # Prints "[[ 0. 0.]
# [ 0. 0.]]"b = np.ones((1,2)) # Create an array of all onesprint b # Prints "[[ 1. 1.]]"c = np.full((2,2), 7) # Create a constant arrayprint c # Prints "[[ 7. 7.]
# [ 7. 7.]]"d = np.eye(2) # Create a 2x2 identity matrixprint d # Prints "[[ 1. 0.]
# [ 0. 1.]]"e = np.random.random((2,2)) # Create an array filled with random valuesprint e # Might print "[[ 0.91940167 0.08143941]
# [ 0.68744134 0.87236687]]"1234567891011121314151617181920
數(shù)組索引(Array indexing)
矩陣
矩陣的操作與Matlab語(yǔ)言有很多的相關(guān)性。
#創(chuàng)建矩陣
m=mat([1,2,3])
m
matrix([[1, 2, 3]])
#取值
m[0] #取一行
matrix([[1, 2, 3]])
m[0,1] #第一行,第2個(gè)數(shù)據(jù)2 m[0][1] #注意不能像數(shù)組那樣取值了
Traceback (most recent call last):
File "stdin", line 1, in module
File "/usr/lib64/python2.7/site-packages/numpy/matrixlib/defmatrix.py", line 305, in __getitem__
out = N.ndarray.__getitem__(self, index)
IndexError: index 1 is out of bounds for axis 0 with size 1#將Python的列表轉(zhuǎn)換成NumPy的矩陣
list=[1,2,3]
mat(list)
matrix([[1, 2, 3]])
#矩陣相乘
m1=mat([1,2,3]) #1行3列
m2=mat([4,5,6])
m1*m2.T #注意左列與右行相等 m2.T為轉(zhuǎn)置操作
matrix([[32]])
multiply(m1,m2) #執(zhí)行點(diǎn)乘操作,要使用函數(shù),特別注意
matrix([[ 4, 10, 18]])
#排序
m=mat([[2,5,1],[4,6,2]]) #創(chuàng)建2行3列矩陣
m
matrix([[2, 5, 1],
[4, 6, 2]])
m.sort() #對(duì)每一行進(jìn)行排序
m
matrix([[1, 2, 5],
[2, 4, 6]])
m.shape #獲得矩陣的行列數(shù)
(2, 3)
m.shape[0] #獲得矩陣的行數(shù)2 m.shape[1] #獲得矩陣的列數(shù)3#索引取值
m[1,:] #取得第一行的所有元素
matrix([[2, 4, 6]])
m[1,0:1] #第一行第0個(gè)元素,注意左閉右開(kāi)
matrix([[2]])
m[1,0:3]
matrix([[2, 4, 6]])
m[1,0:2]
matrix([[2, 4]])1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
擴(kuò)展矩陣函數(shù)tile()
例如,要計(jì)算[0,0,0]到一個(gè)多維矩陣中每個(gè)點(diǎn)的距離,則要將[0,0,0]進(jìn)行擴(kuò)展。
tile(inX, (i,j)) ;i是擴(kuò)展個(gè)數(shù),j是擴(kuò)展長(zhǎng)度
實(shí)例如下:
x=mat([0,0,0])
x
matrix([[0, 0, 0]])
tile(x,(3,1)) #即將x擴(kuò)展3個(gè),j=1,表示其列數(shù)不變
matrix([[0, 0, 0],
[0, 0, 0],
[0, 0, 0]])
tile(x,(2,2)) #x擴(kuò)展2次,j=2,橫向擴(kuò)展
matrix([[0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0]])1234567891011121314
import?math
def?multi(a,b):
return?a*b
if?__name__=="__main__":
a,b,c=map(int,input().split())?#一行輸入用空格分割
print(multi(multi(a,b),c))
python3.5引入了一個(gè)新的語(yǔ)法@來(lái)表示矩陣乘法,但標(biāo)準(zhǔn)庫(kù)內(nèi)并沒(méi)有使用它的地方,numpy中可以使用。
import math
r=math.floor(3.2) #向下取整
print(r)
r=math.ceil(4.5) #向上取整
print(r)
r=abs(-2)
r=round(4.5) #四舍五入
r=math.pow(3,2) #冪運(yùn)算
r=math.sqrt(25) #開(kāi)平方
其中 函數(shù)fabs和abs的區(qū)別:函數(shù)fabs的作用是求浮點(diǎn)數(shù)x的絕對(duì)值;函數(shù)abs的作用是求x的絕對(duì)值。fabs函數(shù)原型:double fabs(double x);abs函數(shù)原型:int fabs(int x)。fabs函數(shù)參數(shù):參數(shù)x是一個(gè)浮點(diǎn)數(shù);abs函數(shù)參數(shù):參數(shù)x是一個(gè)整數(shù)
8個(gè)超好用內(nèi)置函數(shù)set(),eval(),sorted(),reversed(),map(),reduce(),filter(),enumerate()
python中有許多內(nèi)置函數(shù),不像print那么廣為人知,但它們卻異常的強(qiáng)大,用好了可以大大提高代碼效率。
這次來(lái)梳理下8個(gè)好用的python內(nèi)置函數(shù)
1、set()
當(dāng)需要對(duì)一個(gè)列表進(jìn)行去重操作的時(shí)候,set()函數(shù)就派上用場(chǎng)了。
用于創(chuàng)建一個(gè)集合,集合里的元素是無(wú)序且不重復(fù)的。集合對(duì)象創(chuàng)建后,還能使用并集、交集、差集功能。
2、eval()之前有人問(wèn)如何用python寫(xiě)一個(gè)四則運(yùn)算器,輸入字符串公式,直接產(chǎn)生結(jié)果。用eval()來(lái)做就很簡(jiǎn)單:eval(str_expression)作用是將字符串轉(zhuǎn)換成表達(dá)式,并且執(zhí)行。
3、sorted()在處理數(shù)據(jù)過(guò)程中,我們經(jīng)常會(huì)用到排序操作,比如將列表、字典、元組里面的元素正/倒排序。這時(shí)候就需要用到sorted() ,它可以對(duì)任何可迭代對(duì)象進(jìn)行排序,并返回列表。對(duì)列表升序操作:
對(duì)元組倒序操作:
使用參數(shù):key,根據(jù)自定義規(guī)則,按字符串長(zhǎng)度來(lái)排序:
根據(jù)自定義規(guī)則,對(duì)元組構(gòu)成的列表進(jìn)行排序:
4、reversed()如果需要對(duì)序列的元素進(jìn)行反轉(zhuǎn)操作,reversed()函數(shù)能幫到你。reversed()接受一個(gè)序列,將序列里的元素反轉(zhuǎn),并最終返回迭代器。
5、map()做文本處理的時(shí)候,假如要對(duì)序列里的每個(gè)單詞進(jìn)行大寫(xiě)轉(zhuǎn)化操作。這個(gè)時(shí)候就可以使用map()函數(shù)。
map()會(huì)根據(jù)提供的函數(shù),對(duì)指定的序列做映射,最終返回迭代器。也就是說(shuō)map()函數(shù)會(huì)把序列里的每一個(gè)元素用指定的方法加工一遍,最終返回給你加工好的序列。舉個(gè)例子,對(duì)列表里的每個(gè)數(shù)字作平方處理:
6、reduce()前面說(shuō)到對(duì)列表里的每個(gè)數(shù)字作平方處理,用map()函數(shù)。那我想將列表里的每個(gè)元素相乘,該怎么做呢?這時(shí)候用到reduce()函數(shù)。
reduce()會(huì)對(duì)參數(shù)序列中元素進(jìn)行累積。第一、第二個(gè)元素先進(jìn)行函數(shù)操作,生成的結(jié)果再和第三個(gè)元素進(jìn)行函數(shù)操作,以此類(lèi)推,最終生成所有元素累積運(yùn)算的結(jié)果。再舉個(gè)例子,將字母連接成字符串。
你可能已經(jīng)注意到,reduce()函數(shù)在python3里已經(jīng)不再是內(nèi)置函數(shù),而是遷移到了functools模塊中。這里把reduce()函數(shù)拎出來(lái)講,是因?yàn)樗匾恕?/p>
7、filter()一些數(shù)字組成的列表,要把其中偶數(shù)去掉,該怎么做呢?
filter()函數(shù)輕松完成了任務(wù),它用于過(guò)濾序列,過(guò)濾掉不符合條件的元素,返回一個(gè)迭代器對(duì)象。filter()函數(shù)和map()、reduce()函數(shù)類(lèi)似,都是將序列里的每個(gè)元素映射到函數(shù),最終返回結(jié)果。我們?cè)僭囋嚕绾螐脑S多單詞里挑出包含字母w的單詞。
8、enumerate()這樣一個(gè)場(chǎng)景,同時(shí)打印出序列里每一個(gè)元素和它對(duì)應(yīng)的順序號(hào),我們用enumerate()函數(shù)做做看。
enumerate翻譯過(guò)來(lái)是枚舉、列舉的意思,所以說(shuō)enumerate()函數(shù)用于對(duì)序列里的元素進(jìn)行順序標(biāo)注,返回(元素、索引)組成的迭代器。再舉個(gè)例子說(shuō)明,對(duì)字符串進(jìn)行標(biāo)注,返回每個(gè)字母和其索引。