出品:Python數(shù)據(jù)之道
作者:Peter
編輯:Lemon
本文中介紹 Python 中 5 個高階內(nèi)置函數(shù),它們不僅能夠幫助我們了解 Python 的數(shù)據(jù)結(jié)構(gòu),同時也能加快數(shù)據(jù)處理的速度,體會到 Python 的強(qiáng)大。
zip
filter
enumberate
reversed/reverse
eval
首先,我們先來學(xué)習(xí)一個非常強(qiáng)大的內(nèi)置函數(shù): zip
。通過一個例子來引出 zip
的使用:
需求:如果我們想對兩個列表對應(yīng)位置上的數(shù)字一一求和,該如何操作?
x = [1,2,3]
y = [4,5,6]
for循環(huán)實(shí)現(xiàn)
zip實(shí)現(xiàn)
具體實(shí)現(xiàn)過程:
help(zip)
空序列
接受列表、元組、集合、字符串
接受列表、元組、集合、字符串的任意組合:
## 列表、元組、集合、字符串的隨意組合
a = [1,2,3]
b = {4,5,6}
c = (7,8,9)
d = 'zip'
print(list(zip(a,b))) # 列表+集合
print('------------')
print(list(zip(a,c))) # 列表+元組
print('------------')
print(list(zip(b,d))) # 集合+元組
print('------------')
print(list(zip(c,d))) # 元組+字符串
print('------------')
print(list(zip(a,b,c))) # 列表+集合+字符串
上面的多個元素的長度都是相同的,下面的例子來展示 zip
處理不同長度的序列。
我們發(fā)現(xiàn):zip會選擇最小長度的序列進(jìn)行合并
filter
本身是 過濾
的意思:就是將那些不符合我們要求的數(shù)據(jù)直接過濾舍棄掉,剩下那些符合要求的數(shù)據(jù)。
將序列中的每個元素傳遞給函數(shù),執(zhí)行的結(jié)果為 True
或者 False
,將結(jié)果為 True
的元素放入新的列表中。
返回的是 filter
對象。如果想看具體的數(shù)據(jù),需要使用 list
來展開。
help(filter)
list(filter(lambda x: x>1, [0,1,9,-4,8,100]))
具體結(jié)果為:
[9, 8, 100]
list(filter(lambda x: x!='shenzhen', ['guangzhou','shanghai','shenzhen','changsha'])) # 篩選不滿足要求的字符串
['guangzhou', 'shanghai', 'changsha']
enumerate
是 Python
的一個重要內(nèi)置函數(shù),返回的是可迭代序列的元素和下標(biāo),對列表、集合、字典、字符串等都適用的。
在 Python
的 for
循環(huán)中使用的非常廣泛。
如果想查看結(jié)果,需要使用list函數(shù)來進(jìn)行顯示。
help(enumerate)
reversed()
函數(shù)是返回序列 seq
的反向訪問的迭代器。
參數(shù)可以是 列表,元組,字符串,不改變原對象
均可。下面通過具體的例子來說明:
help(reversed)
用于對列表中的元素反向排序,方法沒有返回值,只是對列表中的元素進(jìn)行反向排序
只針對列表?。。。。?!
方法只針對列表
# 集合反向
set1 = {1,'python',3,'java',5}
set1.reverse() # 集合沒有reverse方法,該方法只針對列表
eval
直接返回傳入字符串的表達(dá)式的結(jié)果,語法為:
eval(expression[, globals[, locals]])
下面通過幾個例子來直接講解該方法的使用
字符串和列表、字典、集合的轉(zhuǎn)化
三個參數(shù)的意義:
expression : 字符串
globals : 變量作用域,全局命名空間;如果被提供,則必須是一個字典對象
locals : 變量作用域,局部命名空間;如果被提供,可以是任何映射對象
當(dāng)它和globals中有重復(fù)的部分時,locals里的定義會覆蓋掉globals中的:當(dāng)globals和locals中有沖突的部分時,locals有決定權(quán)。
如果locals沒有被 提供的話,則默認(rèn)為globals。
s = 'abcd'
eval(s)
# eval先將‘s’的引號剝?nèi)?,得到s.不可以進(jìn)行計算,開始查找s是否是一個變量的名字,查找到s是一個字符串,所以程序輸出了s中的內(nèi)容
s = 'abcd'
eval('s')
# 結(jié)果為:
'abcd'
最外層一定要使用單引號
作者簡介 Peter,碩士畢業(yè)僧一枚,從電子專業(yè)自學(xué)Python入門數(shù)據(jù)行業(yè),擅長數(shù)據(jù)分析及可視化。喜歡數(shù)據(jù),堅持跑步,熱愛閱讀,樂觀生活。個人格言:不浮于世,不負(fù)于己 個人站點(diǎn):www.renpeter.cn,歡迎常來小屋逛逛