Python有4個(gè)內(nèi)建的數(shù)據(jù)結(jié)構(gòu):List列表,Tuple元組,Dictionary字典,Set集合,統(tǒng)稱為容器container.
(1)列表/元組
都是序列結(jié)構(gòu)
列表 a=[1,2,3]
元組 b=(4,5,6)
列表可被修改,元組不可以
完整復(fù)制列表 : b= a[:]
b=a 無效,b僅是a的別名(或引用)
列表解析:能夠簡化對(duì)列表內(nèi)元素逐一進(jìn)行操作的代碼
a=[1,2,3]
b=[i+2 for i in a]
(2)字典
d= ['today':20, 'tomorrow':30]
或使用dict()函數(shù)轉(zhuǎn)換,或通過dict.fromkeys創(chuàng)建
dict([['today', 20], ['tomorrow', 30]])
dict.fromkeys(['today', 'tomorrow'], 20)
(3)集合
集合與列表的區(qū)別:1.元素是不重復(fù)的,而且是無序的;2.不支持索引
一般用{}或set()函數(shù)創(chuàng)建一個(gè)集合
s=set([1, 2, 3])
特別的運(yùn)算:
a= t | s #并集
b = t & s #交集
c = t - s #求差集(項(xiàng)在t中,但不在s中)
d = t ^ s# 對(duì)稱差集(項(xiàng)在t或s中,但不會(huì)同時(shí)出現(xiàn)在二者中)
(4)函數(shù)式編程
函數(shù)式編程又稱泛函編程。
在Python中,函數(shù)式編程主要由幾個(gè)函數(shù)的使用構(gòu)成:lambda(),map(),reduce(),filter().
map()函數(shù):
b=[i + 2 for i in a] #列表解析的方式本質(zhì)上還是for命令,而Python for命令效率不高
用map函數(shù)寫:
b = map(lambda x: x+2, a) #3.X,map函數(shù)僅僅創(chuàng)建一個(gè)待運(yùn)行的命令容器,只有其他函數(shù)調(diào)用它的時(shí)候才返回結(jié)果
b = list(b)
map()函數(shù)效率高,循環(huán)命令速度相當(dāng)于C語言
reduce()函數(shù):
用于遞歸計(jì)算(3.X中該函數(shù)被移出了全局命名空間,
使用該函數(shù)需要通過from fuctools import reduce 引入reduce )
reduce(lambda x,y: x*y, range(1,n+1))
用for循環(huán)寫:
s = 1
for i in range(1, n+1):
? s = s * i
filter()函數(shù):
過濾器,用來篩選列表中符合條件的元素
b = filter(lambda x: x > 5 and x < 8, range(10))
b = list(b)
列表解析:
b= [i for i in range(10) if i > 5 and i < 8]
總結(jié)自《Python數(shù)據(jù)分析與數(shù)據(jù)挖掘》第2章