Python數(shù)據(jù)結(jié)構(gòu):序列(列表[]残揉、元組())與映射(字典{})語法總結(jié)

一胧后、概述:Python中兩種基本的數(shù)據(jù)結(jié)構(gòu)是序列和映射,序列包含:可變的列表和不可變的元組抱环;而當(dāng)序列不夠用時就出現(xiàn)了映射:字典壳快。列表中的元素是可以變化的,元組里面的元素一旦初始化后就不可更改镇草。列表和元組只是一類元數(shù)據(jù)的集合體眶痰,還不能滿足通過名字引用值的數(shù)據(jù),故字典就充當(dāng)了這個功能角色梯啤。

二凛驮、列表(list):

1.寫法示例:x=[1,2,3,4,5] y=['1','2','3','4','5']

2.索引:

x[0]
=>1

y[0]
=>'1'

3.分片:x[:]

=>[1,2,3,4,5]
x[0:3]

=>[1,2,3]
x[0:4:2]
=>[1,3]

可以看出,第一個數(shù)字表示起始元素的索引值条辟,第二個數(shù)字表示結(jié)束元素的值,但不包含它黔夭,第三個是步長。注意:這三個數(shù)字都可以是負(fù)值羽嫡。

4.序列相加:x+y

=>[1, 2, 3, 4, 5, '1', '2', '3', '4', '5']

5.乘法:x*5

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

6.成員資格:

1 in x
=> True

6 in x

=> False

7.min,max,len:

min(x)
=>1

max(x)
=>5

len(x)
=>5

8.list函數(shù):list('Hello')

=>['H','e','l','l','o']

9.元素賦值:x[0]=11

=> x=[11,2,3,4,5]

10.刪除元素:del x[0]

=> x=[2,3,4,5]

11.分片賦值:x[0:3]=[11,22,33]

=> x=[11,22,33,4,5]

12.append: x.append(6)

=> x=[1,2,3,4,5,6]

13.count: 查找x中元素1出現(xiàn)的次數(shù): x.count(1)

=> 1

14.extend:將一個列表追加到列表末尾: x.extend([6,7,8])

=> x=[1,2,3,4,5,6,7,8]

15.index:找出某個元素的索引位置:x.index(2)=1

16.insert:將元素插入到指定索引前:x.insert(2,10)

=> x=[1,2,10,3,4,5]

17.pop:移除列表中的一個元素本姥,并返回這個元素: x.pop()

=>5
x.pop(0)

=>1

18.remove:移除列表中某個值的第一個匹配項(xiàng):x.remove(1)

=>x=[2,3,4,5]

19.reverse:反向存放:x.reverse() => x=[5,4,3,2,1]

20.sort,sorted:將列表排序:x.reverse()

=> x=[5,4,3,2,1]

=> x.sort()

=> x=[1,2,3,4,5]

注意:sort并不返回任何值,即:

z=x.sort()

=>z = None.

如果你想對x排序杭棵,并且要保留x,有兩種方法共選擇:

(1)z=x[:]

z.sort()

=> z=[5,4,3,2,1]

(2)z=sorted(x)

21.高級排序:如果你希望按照某種特定的方式排序婚惫,可以將函數(shù)、方法名作為參數(shù)傳遞給sort.

x.sort(key=cmp,reverse=True) ,其中key和reverse叫做關(guān)鍵字參數(shù)魂爪,所以您也可以這樣寫:x.sort(reverse=True,key=cmp),也就是關(guān)鍵字參數(shù)可以任意調(diào)整參數(shù)順序先舷。

說明:函數(shù)cmp(a,b),a>b =>1 , a<b =>-1, a=b =>0

任何適用于列表內(nèi)元素的函數(shù)都可以作為key值傳遞進(jìn)去滓侍,當(dāng)然你也可以傳遞自定義的函數(shù)蒋川,個人感覺很像.net里面的委托。

三撩笆、元組

元組不可修改捺球,字符串也是不可修改的缸浦,這個.net中的字符串是一個意思,每次對字符使用+時氮兵,都是重新申請了一段新的地址空間裂逐,所以我們在處理字符串頻繁修改型程序時一般都用StringBuilder.

由于元組和列表最大的不同就是不可修改,所以列表中的 9.元素賦值泣栈,10.刪除元素卜高,11.分片賦值,12.append南片,14.extend掺涛,16.insert,17.pop铃绒,18.remove鸽照,19.reverse螺捐,20.sort,21.高級排序任何妄圖修改元組的函數(shù)都不支持颠悬。

1.寫法:x=1,2,3,4,5 或者 x=(1,2,3,4,5) 或者

x=1, =>x =(1)

2.乘法:

x=(1,2,3,4,5)

x*3

=>(1,2,3,4,5,1,2,3,4,5,1,2,3,4,5)

3.tuple:tuple函數(shù)和list函數(shù)基本一致:tuple('Hello')

=>('H','e','l','l','o')

4.索引:元組也是序列的一種,所以他也可以用索引來訪問元素:

x[0]

=> 1

5.分片:元組也是序列的一種定血,所以他也可以用索引來分片:

x[0:2]

=>(1,2)

6.成員資格: 1 in x

=> True

6 in x

=> False

7.min,max,len: min(x)

=>1

max(x)

=>5

len(x)

=>5

8.count: 查找x中元素1出現(xiàn)的次數(shù): x.count(1)

=> 1

9.index:找出某個元素的索引位置:x.index(2)

=> 1

四赔癌、字典

1.寫法: d={'a':1,'b':2}

2.dict函數(shù):將鍵值對轉(zhuǎn)換成字典:

items=[('a',1),('b',2)]

d=dict(itmes)

=> d={'a':1,'b':2}

3.另一種創(chuàng)建方式:d=dict(a=1,b=2)

=> {'a':1,'b':2}

4.基本字典操作方法:

(1)求元素個數(shù):len(d) => 2

(2)用鍵訪問值:d['a'] => 1

(3)修改值:d['a']=3

(4)刪除: del d['a']

(5)成員資格: 'a' in d

5.很有用的方法:格式化字符串

通常的字符串格式化:

'i am %s ' % 'vertor'

=> 'i am vertor'

而如果應(yīng)字典格式化就可以實(shí)現(xiàn)類似.net中string.format()的功能了:

d={'name':'vertor','age'=20}

'i am %(name)s, and %(age)s years old' % d

=> i am vertor, and 20 years old.

6.clear:清除所有元素

7.淺復(fù)制(shallow copy)copy函數(shù):

d={'name':'verter',age:20,friends:['ali','qq','baidu']}

d2=d.copy()

d2['name']='smith' #用新的值替換原來的值

d2['friends'].remove('qq') #修改原來的值

=>d2

=>{'name':'smith',age:20,friends:['ali','baidu']}

=>d

=>{'name':'verter',age:20,friends:['ali','baidu']}

可以看到,在副本中替換值不會影響到原始字典澜沟;而如果修改了副本灾票,原始字典也會被修改。

如果要避免這種情況就需要用到深復(fù)制:deepcopy

8.深復(fù)制(deepcopy):deepcopy函數(shù)

9.fromkeys:使用給定的鍵建立新的字典

{}.fromkeys(['name','age'])

=>{'name':None,'age':None}

dict.fromkeys(['name','age'])

=>{'name':None,'age':None}

dict.fromkeys(['name','age'],'verter')

=>{'name':'verter','age':'verter'}

10.get:另一種用鍵訪問元素值的方法

d={'name':'verter','age':20}

=>d.get('name')

=>'verter'

=>d.get('friends')

=>None

注意:get與d['friends']的區(qū)別是后者會拋出KeyError異常茫虽,而get不會刊苍,他只是返回None.

11.has_key:

d={'name':'verter','age':20}

=>d.has_key('name')

=>True

注意:python3拋棄了這個API.

12.items和iteritems

(1)items將字典所有以<strong>列表</strong>的形式返回。

d={'name':'verter','age':20}

=>d.items()

=>[('name', 'verter'), ('age', 20)]

(2)iteritems作用大致相同濒析,不過它是返回一個迭代器對象而不是列表

d={'name':'verter','age':20}

=>it=d.iteritems()

=>list(it)

=>[('name', 'verter'), ('age', 20)]

注意:在python3.0中將iteritems私有化了正什,變成了iter()号杏,不知何故婴氮,難道這個功能太蛋疼,被拋棄了盾致?

13.keys和iterkeys

d={'name':'verter','age':20}

=>for k in x.keys(): print(k)

=>'name'

=>'age'

同理:iterkeys返回迭代器,并且也被python3.0拋棄了主经,不再提供此方法了。

14.pop:返回對應(yīng)鍵庭惜,并將他從字典中移除

d.pop('name')

=>'verter'

=>d

=>{'age':20}

15.popitem:不帶參數(shù)罩驻,彈出一個隨機(jī)元素。

d.popitem()

=>{'name','verter'}

這個對事先不知道鍵的情況下很有用护赊。

16.setdefault:設(shè)置默認(rèn)值鉴腻。

17.update:利用一個字段更新另外一個字典迷扇,當(dāng)然是更新對應(yīng)鍵的值

d={'name':'verter','age':20}

=>d2={'name':'verter2'}

=>d.update(d2)

=>d

=>{'name':'verter2','age':20}

18.values和itevalues

(1)values:已列表形式返回字典中的值

(2)itervalues:返回值的迭代器

注意:python3.0還是拋棄了這個API.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市爽哎,隨后出現(xiàn)的幾起案子蜓席,更是在濱河造成了極大的恐慌,老刑警劉巖课锌,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件厨内,死亡現(xiàn)場離奇詭異,居然都是意外死亡渺贤,警方通過查閱死者的電腦和手機(jī)雏胃,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來志鞍,“玉大人瞭亮,你說我怎么就攤上這事」膛铮” “怎么了统翩?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長此洲。 經(jīng)常有香客問我厂汗,道長,這世上最難降的妖魔是什么呜师? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任娶桦,我火速辦了婚禮,結(jié)果婚禮上汁汗,老公的妹妹穿的比我還像新娘衷畦。我一直安慰自己,他們只是感情好知牌,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布祈争。 她就那樣靜靜地躺著,像睡著了一般送爸。 火紅的嫁衣襯著肌膚如雪铛嘱。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天袭厂,我揣著相機(jī)與錄音墨吓,去河邊找鬼。 笑死纹磺,一個胖子當(dāng)著我的面吹牛帖烘,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播橄杨,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼秘症,長吁一口氣:“原來是場噩夢啊……” “哼照卦!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起乡摹,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤役耕,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后聪廉,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體瞬痘,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年板熊,在試婚紗的時候發(fā)現(xiàn)自己被綠了框全。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡干签,死狀恐怖津辩,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情容劳,我是刑警寧澤喘沿,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站鸭蛙,受9級特大地震影響摹恨,放射性物質(zhì)發(fā)生泄漏筋岛。R本人自食惡果不足惜娶视,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望睁宰。 院中可真熱鬧肪获,春花似錦、人聲如沸柒傻。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽红符。三九已至青柄,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間预侯,已是汗流浹背致开。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留萎馅,地道東北人双戳。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像糜芳,于是被迫代替她去往敵國和親飒货。 傳聞我的和親對象是個殘疾皇子魄衅,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內(nèi)容