Python內(nèi)置函數(shù)有很多,為大家推薦5個神仙級的內(nèi)置函數(shù):
津市ssl適用于網(wǎng)站、小程序/APP、API接口等需要進行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯(lián)建站的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18980820575(備注:SSL證書合作)期待與您的合作!
(1)Lambda函數(shù)
用于創(chuàng)建匿名函數(shù),即沒有名稱的函數(shù)。它只是一個表達式,函數(shù)體比def簡單很多。當我們需要創(chuàng)建一個函數(shù)來執(zhí)行單個操作并且可以在一行中編寫時,就可以用到匿名函數(shù)了。
Lamdba的主體是一個表達式,而不是一個代碼塊。僅僅能在lambda表達式中封裝有限的邏輯進去。
利用Lamdba函數(shù),往往可以將代碼簡化許多。
(2)Map函數(shù)
會將一個函數(shù)映射到一個輸入列表的所有元素上,比如我們先創(chuàng)建了一個函數(shù)來返回一個大寫的輸入單詞,然后將此函數(shù)應(yīng)有到列表colors中的所有元素。
我們還可以使用匿名函數(shù)lamdba來配合map函數(shù),這樣可以更加精簡。
(3)Reduce函數(shù)
當需要對一個列表進行一些計算并返回結(jié)果時,reduce()是個非常有用的函數(shù)。舉個例子,當需要計算一個整數(shù)列表所有元素的乘積時,即可使用reduce函數(shù)實現(xiàn)。
它與函數(shù)的最大的區(qū)別就是,reduce()里的映射函數(shù)(function)接收兩個參數(shù),而map接收一個參數(shù)。
(4)enumerate函數(shù)
用于將一個可遍歷的數(shù)據(jù)對象(如列表、元組或字符串)組合為一個索引序列,同時列出數(shù)據(jù)和數(shù)據(jù)下標,一般用在for循環(huán)當中。
它的兩個參數(shù),一個是序列、迭代器或其他支持迭代對象;另一個是下標起始位置,默認情況從0開始,也可以自定義計數(shù)器的起始編號。
(5)Zip函數(shù)
用于將可迭代的對象作為參數(shù),將對象中對應(yīng)的元素打包成一個個元組,然后返回由這些元組組成的列表
當我們使用zip()函數(shù)時,如果各個迭代器的元素個數(shù)不一致,則返回列表長度與最短的對象相同。
NumPy是一個關(guān)于矩陣運算的庫,熟悉Matlab的都應(yīng)該清楚,這個庫就是讓python能夠進行矩陣話的操作,而不用去寫循環(huán)操作。
下面對numpy中的操作進行總結(jié)。
numpy包含兩種基本的數(shù)據(jù)類型:數(shù)組和矩陣。
數(shù)組(Arrays)
from numpy import * a1=array([1,1,1]) #定義一個數(shù)組 a2=array([2,2,2]) a1+a2 #對于元素相加array([3, 3, 3]) a1*2 #乘一個數(shù)array([2, 2, 2])## a1=array([1,2,3]) a1
array([1, 2, 3]) a1**3 #表示對數(shù)組中的每個數(shù)做平方array([ 1, 8, 27])##取值,注意的是它是以0為開始坐標,不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] #第一行第一個數(shù)據(jù)1 a3[0][0] #也可用這種方式1##數(shù)組點乘,相當于matlab點乘操作 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語言有很多的相關(guān)性。
#創(chuàng)建矩陣
m=mat([1,2,3])
m
matrix([[1, 2, 3]])
#取值
m[0] #取一行
matrix([[1, 2, 3]])
m[0,1] #第一行,第2個數(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í)行點乘操作,要使用函數(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() #對每一行進行排序
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個元素,注意左閉右開
matrix([[2]])
m[1,0:3]
matrix([[2, 4, 6]])
m[1,0:2]
matrix([[2, 4]])1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
擴展矩陣函數(shù)tile()
例如,要計算[0,0,0]到一個多維矩陣中每個點的距離,則要將[0,0,0]進行擴展。
tile(inX, (i,j)) ;i是擴展個數(shù),j是擴展長度
實例如下:
x=mat([0,0,0])
x
matrix([[0, 0, 0]])
tile(x,(3,1)) #即將x擴展3個,j=1,表示其列數(shù)不變
matrix([[0, 0, 0],
[0, 0, 0],
[0, 0, 0]])
tile(x,(2,2)) #x擴展2次,j=2,橫向擴展
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引入了一個新的語法@來表示矩陣乘法,但標準庫內(nè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) #冪運算
r=math.sqrt(25) #開平方
其中 函數(shù)fabs和abs的區(qū)別:函數(shù)fabs的作用是求浮點數(shù)x的絕對值;函數(shù)abs的作用是求x的絕對值。fabs函數(shù)原型:double fabs(double x);abs函數(shù)原型:int fabs(int x)。fabs函數(shù)參數(shù):參數(shù)x是一個浮點數(shù);abs函數(shù)參數(shù):參數(shù)x是一個整數(shù)
8個超好用內(nèi)置函數(shù)set(),eval(),sorted(),reversed(),map(),reduce(),filter(),enumerate()
python中有許多內(nèi)置函數(shù),不像print那么廣為人知,但它們卻異常的強大,用好了可以大大提高代碼效率。
這次來梳理下8個好用的python內(nèi)置函數(shù)
1、set()
當需要對一個列表進行去重操作的時候,set()函數(shù)就派上用場了。
用于創(chuàng)建一個集合,集合里的元素是無序且不重復(fù)的。集合對象創(chuàng)建后,還能使用并集、交集、差集功能。
2、eval()之前有人問如何用python寫一個四則運算器,輸入字符串公式,直接產(chǎn)生結(jié)果。用eval()來做就很簡單:eval(str_expression)作用是將字符串轉(zhuǎn)換成表達式,并且執(zhí)行。
3、sorted()在處理數(shù)據(jù)過程中,我們經(jīng)常會用到排序操作,比如將列表、字典、元組里面的元素正/倒排序。這時候就需要用到sorted() ,它可以對任何可迭代對象進行排序,并返回列表。對列表升序操作:
對元組倒序操作:
使用參數(shù):key,根據(jù)自定義規(guī)則,按字符串長度來排序:
根據(jù)自定義規(guī)則,對元組構(gòu)成的列表進行排序:
4、reversed()如果需要對序列的元素進行反轉(zhuǎn)操作,reversed()函數(shù)能幫到你。reversed()接受一個序列,將序列里的元素反轉(zhuǎn),并最終返回迭代器。
5、map()做文本處理的時候,假如要對序列里的每個單詞進行大寫轉(zhuǎn)化操作。這個時候就可以使用map()函數(shù)。
map()會根據(jù)提供的函數(shù),對指定的序列做映射,最終返回迭代器。也就是說map()函數(shù)會把序列里的每一個元素用指定的方法加工一遍,最終返回給你加工好的序列。舉個例子,對列表里的每個數(shù)字作平方處理:
6、reduce()前面說到對列表里的每個數(shù)字作平方處理,用map()函數(shù)。那我想將列表里的每個元素相乘,該怎么做呢?這時候用到reduce()函數(shù)。
reduce()會對參數(shù)序列中元素進行累積。第一、第二個元素先進行函數(shù)操作,生成的結(jié)果再和第三個元素進行函數(shù)操作,以此類推,最終生成所有元素累積運算的結(jié)果。再舉個例子,將字母連接成字符串。
你可能已經(jīng)注意到,reduce()函數(shù)在python3里已經(jīng)不再是內(nèi)置函數(shù),而是遷移到了functools模塊中。這里把reduce()函數(shù)拎出來講,是因為它太重要了。
7、filter()一些數(shù)字組成的列表,要把其中偶數(shù)去掉,該怎么做呢?
filter()函數(shù)輕松完成了任務(wù),它用于過濾序列,過濾掉不符合條件的元素,返回一個迭代器對象。filter()函數(shù)和map()、reduce()函數(shù)類似,都是將序列里的每個元素映射到函數(shù),最終返回結(jié)果。我們再試試,如何從許多單詞里挑出包含字母w的單詞。
8、enumerate()這樣一個場景,同時打印出序列里每一個元素和它對應(yīng)的順序號,我們用enumerate()函數(shù)做做看。
enumerate翻譯過來是枚舉、列舉的意思,所以說enumerate()函數(shù)用于對序列里的元素進行順序標注,返回(元素、索引)組成的迭代器。再舉個例子說明,對字符串進行標注,返回每個字母和其索引。