列表、元組种樱、字典蒙袍、集合

  1. 列表
    序列是Python中最基本的數(shù)據(jù)結(jié)構(gòu)。序列中的每個(gè)元素都分配一個(gè)數(shù)字- 它的位置嫩挤,或索引害幅,第一個(gè)索引是0,第二個(gè)索引是1岂昭,依此類推以现。
    Python有6個(gè)序列的內(nèi)置類型,但最常見的是列表和元組约啊。
    序列都可以進(jìn)行的操作包括索引邑遏,切片,加恰矩,乘记盒,檢查成員。
    此外外傅,Python已經(jīng)內(nèi)置確定序列的長度以及確定最大和最小的元素的方法纪吮。
    列表是最常用的Python數(shù)據(jù)類型,它可以作為一個(gè)方括號(hào)內(nèi)的逗號(hào)分隔值出現(xiàn)栏豺。
    列表的數(shù)據(jù)項(xiàng)不需要具有相同的類型
    創(chuàng)建一個(gè)列表彬碱,只要把逗號(hào)分隔的不同的數(shù)據(jù)項(xiàng)使用方括號(hào)括起來即可。
    列表的一般用法:

list1 = ['frui','male',1989,'python',[2016,2017],'c'] #list內(nèi)元素的數(shù)據(jù)類型可以不同,也可以是另外一個(gè)list
list2 = ['']
print (list1)

使用下標(biāo)索引來訪問列表中的值奥洼,同樣你也可以使用方括號(hào)的形式截取字符,如下所示:

print (list1[:])
print (list1[0],list1[1])
print (list1[-1],list1[-2])
print (list1[0:3]) #切片,此操作顧頭不顧尾
print (list1[:3])
print (list1[-3:]) #切片晚胡,從后向前數(shù)索引灵奖,也只能從左往右切片,同樣是顧頭不顧尾估盘。(這樣會(huì)無法取到最后一個(gè)元素瓷患,思考怎么辦?)
print (list1[0:-1:2]) #按步長切片
print (list1[::2]) #按步長切片

list1.append("linux") #在列表末尾追加元素
list1.insert(1,"linux") #直接把元素插入的指定位置
list1[0] = "jay" #(改)直接替換某個(gè)位置元素

delete

list1.pop() #刪除list末尾的元素
list1.pop(1) #刪除指定位置的元素
del list1[0]
list1.remove("python") #此種方法和前兩種的區(qū)別是什么遣妥?

print (list1)
print (list1.index(1989)) #查找已知元素的索引
print (list1[list1.index(1989)])

print (list1.count(1989)) #打印某元素在列表中的數(shù)量
list1.clear() #清除整個(gè)列表
list1.reverse() #反轉(zhuǎn)整個(gè)列表
list1.sort() #排序 按ASCII碼順序排序,若元素中有l(wèi)ist類型擅编,則無法排序,為什么?

list2 = [1,2,3,4]
list1.extend(list2) #列表合并
print (list1)
del list2 #刪除整個(gè)變量

列表的深淺copy

淺拷貝只能拷貝最外層爱态,修改內(nèi)層則原列表和新列表都會(huì)變化谭贪。

深拷貝是指將原列表完全克隆一份新的。

import copy
list1 = ['frui','male',1989,'python',[2016,2017],'c']
list2 = list1.copy() #淺copy
list3 = copy.copy(list1) #淺copy锦担,同list1.copy()效果相同
list4 = copy.deepcopy(list1) #深copy俭识,會(huì)和list1占用同樣大小的內(nèi)存空間
list1[0] = '自由'
list1[4][0] = 2015
print (list1,'\n',list2,'\n',list3,'\n',list4)

列表的循環(huán):逐個(gè)打印列表元素

list1 = ['frui','male',1989,'python',[2016,2017],'c']
for i in list1:
print (i)

  1. 元組
    元組也是存一組數(shù)據(jù),只是一旦創(chuàng)建洞渔,便不能修改套媚,所以又叫只讀列表。元組創(chuàng)建很簡單磁椒,只需要在括號(hào)中添加元素堤瘤,并使用逗號(hào)隔開即可。

tup1 = (1,2,3,4,5)
tup2 = ('frui', 27)
tup3 = "a", "b", "c", "d";
tup4 = () #創(chuàng)建空元組
元組中只包含一個(gè)元素時(shí)浆熔,需要在元素后面添加逗號(hào)

tuple5 = (50,) #元組中只包含一個(gè)元素時(shí)本辐,需要在元素后面添加逗號(hào)
tuple6 = (50)

如果不加逗號(hào),則定義的不是tuple蘸拔,是50這個(gè)數(shù)师郑!這是因?yàn)槔ㄌ?hào)()既可以表示tuple,又可以表示數(shù)學(xué)公式中的小括號(hào)调窍,這就產(chǎn)生了歧義宝冕,因此,Python規(guī)定邓萨,這種情況下地梨,按小括號(hào)進(jìn)行計(jì)算。

元組只有兩個(gè)方法:count和index
不可變的tuple有什么意義缔恳?因?yàn)閠uple不可變宝剖,所以代碼更安全。如果可能歉甚,能用tuple代替list就盡量用tuple万细。

  1. 字典
    3.1 字典的使用
    字典是另一種可變?nèi)萜髂P停铱纱鎯?chǔ)任意類型對(duì)象纸泄。
    字典的每個(gè)鍵值對(duì)()用冒號(hào)(:)分割赖钞,每個(gè)對(duì)之間用逗號(hào)(,)分割,整個(gè)字典包括在花括號(hào)({})中 ,格式如下所示:

d = {key1 : value1, key2 : value2 }
鍵必須是唯一的聘裁,但值則不必雪营。值可以取任何數(shù)據(jù)類型,但鍵必須是不可變的衡便,如字符串献起,數(shù)字或元組洋访。

info = {
'stu1':"Xiao Ming",
'stu2':"Xiao Liang",
'stu3':"Xiao Hong",
'stu4':"Xiao Rui",
}
print (info)

修改

info['stu2'] = "Xiao Hu"

增加

info['stu5'] = "Xiao Fang"

刪除

info.pop('stu2')
del info['stu1']
info.popitem() #隨機(jī)刪一個(gè)
print (info)
info.clear() #清空字典所有條目

查找

print ('stu2' in info) #判斷是否存在,存在則返回True谴餐,否則返回False
print (info['stu1']) #如果一個(gè)key不存在姻政,就報(bào)錯(cuò),get不會(huì)总寒,不存在只返回None

dict.get(key, default=None)

返回指定鍵的值扶歪,如果值不在字典中返回default值

比較安全的查找方法

print (info.get('stu6'))

其他

print (info.values()) #打印所有的值(即除了key)
print (info.keys()) #打印所有的key
print (info.items()) #把字典轉(zhuǎn)化為列表

dict.setdefault(key, default=None)

和get()類似, 但如果鍵不存在于字典中,將會(huì)添加鍵并將值設(shè)為default

info.setdefault ('class3',{'Xiao Rui', 15})
print (info)
info.setdefault ('class1',{'Xiao Hong', 16})
print (info)

循環(huán)打印

for i in info:
print (i,info[i])

for k,v in info.items():
print (k, v)

多級(jí)字典嵌套及操作

info = {
'class1':{
'stu1':["Xiao Ming",16]
},

'class2':{
    'stu2':["Xiao Liang",17]
}

}
info['class1']['stu1'][1] = 18
print (info)

dict.fromkeys(seq[, val]))

創(chuàng)建一個(gè)新字典摄闸,以序列 seq 中元素做字典的鍵善镰,val 為字典所有鍵對(duì)應(yīng)的初始值

eg:
print (dict.fromkeys([6,7,8],'test'))
c = dict.fromkeys([6,7,8],[1,{'name':'frui'}])
c[6][1]['name'] = 'sorui'
print (c)

update方法

info = {
'stu1':"Xiao Ming",
'stu2':"Xiao Liang",
'stu3':"Xiao Hong",
'stu4':"Xiao Rui",
}
b = {
'stu1': "Xiao Dong",
1:3,
2:4
}
print (info)
info.update(b)
為什么dict查找速度這么快?
因?yàn)閐ict的實(shí)現(xiàn)原理和查字典是一樣的年枕。假設(shè)字典包含了1萬個(gè)漢字炫欺,我們要查某一個(gè)字,一個(gè)辦法是把字典從第一頁往后翻熏兄,直到找到我們想要的字為止品洛,這種方法就是在list中查找元素的方法,list越大摩桶,查找越慢桥状。
第二種方法是先在字典的索引表里(比如部首表)查這個(gè)字對(duì)應(yīng)的頁碼,然后直接翻到該頁硝清,找到這個(gè)字辅斟。無論找哪個(gè)字,這種查找速度都非陈茫快士飒,不會(huì)隨著字典大小的增加而變慢。dict就是第二種實(shí)現(xiàn)方式蔗崎。
和list比較酵幕,dict有以下幾個(gè)特點(diǎn):
無序
查找和插入的速度極快,不會(huì)隨著key的增加而變慢缓苛;
需要占用大量的內(nèi)存芳撒,內(nèi)存浪費(fèi)多。
而list相反:
查找和插入的時(shí)間隨著元素的增加而增加未桥;
占用空間小番官,浪費(fèi)內(nèi)存很少。
所以钢属,dict是用空間來換取時(shí)間的一種方法。
dict可以用在需要高速查找的很多地方门躯,在Python代碼中幾乎無處不在淆党,正確使用dict非常重要,需要牢記的第一條就是dict的key必須是不可變對(duì)象。這是因?yàn)閐ict根據(jù)key來計(jì)算value的存儲(chǔ)位置染乌,如果每次計(jì)算相同的key得出的結(jié)果不同山孔,那dict內(nèi)部就完全混亂了。這個(gè)通過key計(jì)算位置的算法稱為哈希算法(Hash)荷憋。
要保證hash的正確性台颠,作為key的對(duì)象就不能變。在Python中勒庄,字符串串前、整數(shù)等都是不可變的,因此实蔽,可以放心地作為key荡碾。而list是可變的,就不能作為key:

  1. 集合
    集合是一個(gè)無序的局装,不重復(fù)的數(shù)據(jù)組合坛吁,它的主要作用如下:

去重,把一個(gè)列表變成集合铐尚,就自動(dòng)去重了
關(guān)系測試拨脉,測試兩組數(shù)據(jù)之前的交集、差集宣增、并集等關(guān)系
常用操作

去重

list1 = [3,2,1,4,5,6,5,4,3,2,1]
print (list1, type(list1))
list1 = set(list1)
print (list1, type(list1))

list2 = set([4,5,6,7,8,9])

交集

print (list1.intersection(list2))

并集

print (list1.union(list2))

差集

print (list1.difference(list2))
print (list2.difference(list1))

子集玫膀、父集

print (list1.issubset(list2))
print (list1.issuperset(list2))

list3 = set([4,5,6])
print (list3.issubset(list2))
print (list2.issuperset(list3))

對(duì)稱差集

print (list1.symmetric_difference(list2))

Return True if two sets have a null intersection

list4 = set([1,2,3])
print (list3.isdisjoint(list4))

交集

print (list1 & list2)

union

print (list2 | list1)

difference

print (list1 - list2)

對(duì)稱差集

print (list1 ^ list2)

添加

list1.add(999) #添加一項(xiàng)
print (list1)
list1.update([66,77,88]) #添加多項(xiàng)
print (list1)
print (list1.add(999)) #猜猜打印什么?為什么

刪除

list1.remove(999)
print (list1)

remove and return arbitrary set element

print (list1.pop())

Remove an element from a set if it is a member.If the element is not a member, do nothing.

print (list1.discard(888))

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末统舀,一起剝皮案震驚了整個(gè)濱河市匆骗,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌誉简,老刑警劉巖碉就,帶你破解...
    沈念sama閱讀 211,290評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異闷串,居然都是意外死亡瓮钥,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門烹吵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來碉熄,“玉大人,你說我怎么就攤上這事肋拔⌒饨颍” “怎么了?”我有些...
    開封第一講書人閱讀 156,872評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵凉蜂,是天一觀的道長琼梆。 經(jīng)常有香客問我性誉,道長,這世上最難降的妖魔是什么茎杂? 我笑而不...
    開封第一講書人閱讀 56,415評(píng)論 1 283
  • 正文 為了忘掉前任错览,我火速辦了婚禮,結(jié)果婚禮上煌往,老公的妹妹穿的比我還像新娘倾哺。我一直安慰自己,他們只是感情好刽脖,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評(píng)論 6 385
  • 文/花漫 我一把揭開白布羞海。 她就那樣靜靜地躺著,像睡著了一般曾棕。 火紅的嫁衣襯著肌膚如雪扣猫。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,784評(píng)論 1 290
  • 那天翘地,我揣著相機(jī)與錄音申尤,去河邊找鬼。 笑死衙耕,一個(gè)胖子當(dāng)著我的面吹牛昧穿,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播橙喘,決...
    沈念sama閱讀 38,927評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼时鸵,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了厅瞎?” 一聲冷哼從身側(cè)響起饰潜,我...
    開封第一講書人閱讀 37,691評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎和簸,沒想到半個(gè)月后彭雾,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,137評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡锁保,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評(píng)論 2 326
  • 正文 我和宋清朗相戀三年薯酝,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片爽柒。...
    茶點(diǎn)故事閱讀 38,622評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡吴菠,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出浩村,到底是詐尸還是另有隱情做葵,我是刑警寧澤,帶...
    沈念sama閱讀 34,289評(píng)論 4 329
  • 正文 年R本政府宣布心墅,位于F島的核電站蜂挪,受9級(jí)特大地震影響重挑,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜棠涮,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望刺覆。 院中可真熱鬧严肪,春花似錦、人聲如沸谦屑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽氢橙。三九已至酝枢,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間悍手,已是汗流浹背帘睦。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留坦康,地道東北人竣付。 一個(gè)月前我還...
    沈念sama閱讀 46,316評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像滞欠,于是被迫代替她去往敵國和親古胆。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評(píng)論 2 348

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