零基礎(chǔ)小白必看篇:Python列表飘千、元祖、字典栈雳、集合操作大全

數(shù)據(jù)結(jié)構(gòu)基本上就是——它們是可以處理一些 數(shù)據(jù) 的 結(jié)構(gòu) 护奈。或者說哥纫,它們是用來存儲一組相關(guān)數(shù)據(jù)的霉旗。

在Python中有四種內(nèi)建的數(shù)據(jù)結(jié)構(gòu)——列表、元組和字典蛀骇,集合厌秒。我們將會學(xué)習(xí)如何使用它們,以及它們?nèi)绾问咕幊套兊煤唵?/p>

如果大家在學(xué)習(xí)中遇到困難擅憔,想找一個python學(xué)習(xí)交流環(huán)境鸵闪,可以加入我們的python圈,裙號947618024暑诸,可領(lǐng)取python學(xué)習(xí)資料岛马,會節(jié)約很多時間,減少很多遇到的難題屠列。

一、列表list

是處理一組有序項目的數(shù)據(jù)結(jié)構(gòu)伞矩,即你可以在一個列表中存儲一個 序列 的項目笛洛。假想你有一個購物列表,上面記載著你要買的東西乃坤,你就容易理解列表了苛让。只不過在你的購物表上,可能每樣?xùn)|西都獨自占有一行湿诊,

而在Python中狱杰,你在每個項目之間用逗號分割。列表中的項目應(yīng)該包括在方括號中厅须,這樣Python就知道你是在指明一個列表仿畸。

一旦你創(chuàng)建了一個列表,你可以添加朗和、刪除或是搜索列表中的項目错沽。由于你可以增加或刪除項目,我們說列表是 可變的 數(shù)據(jù)類型眶拉,即這種類型是可以被改變的

#購物清單shoplist?=?['蘋果','芒果','胡蘿卜','香蕉']

基本操作

print('我有',len(shoplist),'個商品在我的購物清單.')print('它們是:'), # 提示foritem in shoplist:print(item)print('我還買了大米.')?shoplist.append('大米')print('現(xiàn)在我的購物清單是', shoplist)# ['蘋果','芒果','胡蘿卜','香蕉','大米']

基本操作——增

append 追加

li = ['蘋果','芒果','胡蘿卜','香蕉']li.append('大米')print(li)# ['蘋果','芒果','胡蘿卜','香蕉','大米']?li.append(1)# ['蘋果','芒果','胡蘿卜','香蕉','大米',1]?print(li.append('hello'))? #None:無返回值千埃,li.append()只是一個方法、動作?print(li)? # ['蘋果','芒果','胡蘿卜','香蕉','大米',1,'hello']

insert?插入

li = ['蘋果','芒果','胡蘿卜','香蕉']li.insert(3,'草莓')?print(li)? # ['蘋果','芒果','胡蘿卜','草莓','香蕉']

extend?追加到末尾

li = ['蘋果','芒果','胡蘿卜','香蕉']li.extend('cc')print(li)# ['蘋果','芒果','胡蘿卜','香蕉','c','c']?li.extend([1,2,3])print(li)# ['蘋果','芒果','胡蘿卜','香蕉','c','c',123]?li.extend(123) #報錯:數(shù)字不能迭代print(li)? #TypeError:'int'object is not iterable

應(yīng)用實例:

連續(xù)輸入員工姓名忆植,輸入Q/q退出并打印列表

li = []whileTrue:? ? username =input("請輸入要添加的員工姓名:")ifusername.strip().upper() =='Q':breakli.append(username)print(li)print(li)

運(yùn)行結(jié)果:

列表——刪

remove:按照元素刪除

li = ['蘋果','芒果','胡蘿卜','香蕉']li.remove('芒果')print(li)? #? ['蘋果','胡蘿卜','香蕉']

pop:按照索引刪除——有返回值

li = ['蘋果','芒果','胡蘿卜','香蕉']name = li.pop(1)? #有返回值print(name,li)# 芒果 ['蘋果','胡蘿卜','香蕉']?name = li.pop()? #不寫索引則默認(rèn)刪除最后一個print(name,li)# 香蕉 ['蘋果','胡蘿卜']

clear: 清空

li= ['蘋果','芒果','胡蘿卜','香蕉']li.clear()print(li)#[]

del:刪除

li = ['蘋果','芒果','胡蘿卜','香蕉']del li[2:]print(li)# ['蘋果','芒果']?del li? #刪除之后放可,已經(jīng)不存在谒臼,打印報錯print(li) #NameError: name'li'is not defined

循環(huán)刪除

li = [11,22,33,44,55]fori inrange(len(li)):print(i)? ? del li[0]print(li)

列表——改

li[索引]?= ‘被修改的內(nèi)容’

li = ['蘋果','芒果','胡蘿卜','香蕉']li[0] ='火龍果'#將索引為0的位置改為‘火龍果’print(li)# ['火龍果','芒果','胡蘿卜','香蕉']

li[切片]?= ‘被修改的內(nèi)容’(迭代式:分成最小的元素,一個一個添加)

li = ['蘋果','芒果','胡蘿卜','香蕉']li[0:2] ='abcd'# 將索引0-2替換為abcd,切片之后迭代處理?print(li)// ['a','b','c','d','胡蘿卜','香蕉']?li[0:3]=['我','喜歡','吃','水果']print(li)// ['我','喜歡','吃','水果','d','胡蘿卜','香蕉'

列表——查

從頭到尾 :for循環(huán)

li= ['蘋果','芒果','胡蘿卜','香蕉']for i in li:? ? print(i)

某一個:索引

li= ['蘋果','芒果','胡蘿卜','香蕉']print(li[1])#芒果

一段:切片

li = ['蘋果','芒果','胡蘿卜','香蕉']print(li[0:2])? ? #['蘋果','芒果','胡蘿卜']

列表——嵌套

li = ['蘋果', '芒果', '胡蘿卜', ['a','b','c'],'香蕉']print(li[2][1]) #蘿li[3][0].upper() #把列表中第四個元素列表的第一個元素變?yōu)榇髮?print(li)# ['蘋果', '芒果', '胡蘿卜', ['a', 'b', 'c'], '香蕉']

列表——循環(huán)打印

#索引默認(rèn)從零開始li = ['alex','taibai','wusir','egon']foriinli:print(li.index(i),i)#指定索引從100開始for index,i in enumerate(li,100):? ? print(index,i)

運(yùn)行結(jié)果:

其他常用操作

split:字符串轉(zhuǎn)換成列表 str--->list

s='xcsd_cdc_eht_木木'print(s.split('_'))? // ['xcsd','cdc','eht','木木']?s1 ='xc sdc dc eht曾 木木'print(s1.split(' '))? ? // ['xc','sdc','dc','eht曾','木木']

join:列表轉(zhuǎn)換成字符串 list--->str

join(可迭代對象iterable) split

可迭代對象iterable:list,str,元祖

li = ['xcsd','cdc','eht','木木']s =''.join(li)print(s)? #xcsdcdceht木木s1 ='_'.join(li)print(s1)? #xcsd_cdc_eht_木木

range:顧頭不顧尾——相當(dāng)于有序的數(shù)字列表(可以反向耀里,加步長)

fori inrange(2,6):print(i)fori inrange(3):? #從0開始蜈缤,0可省略

應(yīng)用實例:

循環(huán)打印,列表里遇到列表也需要循環(huán)打印

li = [1,2,3,5,'alex',[2,3,4,5,'taibai'],'afds']foriinli:iftype(i) == list:fornini:print(n)else:print(i)

運(yùn)行結(jié)果:

二备韧、元祖

元組和列表十分類似劫樟,只不過元組和字符串一樣是 不可變的 即你不能修改元組。元組通過圓括號中用逗號分割的項目定義织堂。

元組通常用在使語句或用戶定義的函數(shù)能夠安全地采用一組值的時候叠艳,即被使用的元組的值不會改變

tu1 = (1)tu2 = (1,)print(tu1,type(tu1))? ? #1print(tu2,type(tu2))? ? #(1,)

tu3 = ([1])tu4 = ([1],)print(tu3,type(tu3))? ? #[1] print(tu4,type(tu4))? ? #([1],)

元組的基本操作

tu = (1,2,3,'alex','egon')print(tu[2])? ? #3print(tu[0:2])? #(1,2)fori in tu:print(i)? ? #循環(huán)打印元祖

字典

字典類似于你通過聯(lián)系人名字查找地址和聯(lián)系人詳細(xì)情況的地址簿,即易阳,我們把鍵(名字)和值(詳細(xì)情況)聯(lián)系在一起附较。注意,鍵必須是唯一的潦俺,就像如果有兩個人恰巧同名的話拒课,你無法找到正確的信息。

注意事示,你只能使用不可變的對象(比如字符串)來作為字典的鍵早像,但是你可以把不可變或可變的對象作為字典的值。

基本說來就是肖爵,你應(yīng)該只使用簡單的對象作為鍵卢鹦。

鍵值對在字典中以這樣的方式標(biāo)記:d = {key1 : value1, key2 : value2 }。

注意它們的鍵/值對用冒號分割劝堪,而各個對用逗號分割冀自,所有這些都包括在花括號中

dict

key(鍵)必須是不可變數(shù)據(jù)類型,可哈希

value(值)任意數(shù)據(jù)類型

dict 優(yōu)點:二分查找去查詢

存儲大量的關(guān)系型數(shù)據(jù)

特點:<=3.5版本無序秒啦,3.6以后都是有序

1.字典— 增

dic['鍵'] = 值

dic1 = {'age':18,'name':'xc','sex':'female'}dic1['height'] =165print(dic1) # 沒有鍵值對熬粗,增加# {'age':18,'name':'xc','sex':'female','height':165}?dic1['age'] =21print(dic1) #有鍵值對,則修改#{'age':21,'name':'xc','sex':'female','height':165}

setdefault 設(shè)置默認(rèn)

# dic1 = {'age':18,'name':'xc','sex':'female'}dic1.setdefault('weight',120)print(dic1)? ? # 沒有鍵值對余境,增加# {'age':18,'name':'xc','sex':'female','weight':120}?dic1.setdefault('name','aa')print(dic1)? ? ? #有鍵值對驻呐,不做任何操作# {'age':18,'name':'xc','sex':'female','weight':120}

2. 字典—— 刪

刪除優(yōu)先使用pop(有返回值,要刪除的內(nèi)容不存在時不報錯)芳来,而不是del

pop 刪除

dic1 = {'age':18,'name':'xc','sex':'female'}print(dic1.pop('age'))? #有age直接刪除---有返回值暴氏,按鍵刪除?print(dic1)? ? #18{'name':'xc','sex':'female'}?print(dic1.pop('erge','沒有此鍵/None'))? #沒有erge----可設(shè)置返回值:沒有此鍵/Noneprint(dic1)? ? #沒有此鍵/None? ? {'name':'xc','sex':'female'}

popitem 隨機(jī)刪除

dic1 = {'age':18,'name':'xc','sex':'female'}print(dic1.popitem())? #('sex','female')#隨機(jī)刪除:有返回值-----返回元祖:刪除的鍵值

clear 清空

dic1= {'age':18,'name':'xc','sex':'female'}dic1.clear()#清空字典print(dic1)? ? #{}

del 刪除

dic1 = {'age':18,'name':'xc','sex':'female'}del dic1['name']? # 有,則刪除# del dic1['name1']? #沒有绣张,則報錯?print(dic1)? ? #{'age':18,'sex':'female'}

3. 字典—— 改

update

dic = {'age':18,'name':'xc','sex':'female'}dic2 = {'name':'alex','weight':'168'}dic2.update(dic)? ? ? #有則更新覆蓋答渔,沒有則增加?print(dic)? #{'age':18,'name':'xc','sex':'female'}?print(dic2) #{'name':'xc','weight':'168','age':18,'sex':'female'}

4. 字典——查

keys,values侥涵,items

dic1 = {'age':18,'name':'xc','sex':'female'}?print(dic1.keys(),type(dic1.keys()))? ? #鍵 dict_keys(['age','name','sex']) ?print(dic1.values())? ? #值 dict_values([18,'xc','female'])?print(dic1.items())? ? #元祖 dict_items([('age',18), ('name','xc'), ('sex','female')])

得到鍵值沼撕,首選get

print(dic1['name'])? ? ? #有則打印#print(dic1['name1'])? ? #沒有則報錯?print(dic1.get('name'))? #有name直接輸出---有返回值?print(dic1.get('name1','沒有此鍵'))? #沒有name1----可設(shè)置返回值:沒有此鍵/None

循環(huán)輸出

foriindic1:print(i)? ? #循環(huán)打印鍵(默認(rèn)為鍵)foriindic1.keys():print(i)? ? #循環(huán)打印鍵foriindic1.values():print(i)? ? #循環(huán)打印值foriindic1.items():print(i)? ? #循環(huán)打印鍵值對?fork,vindic1.items():print(k,v)? ? #打印鍵和值

5. 字典的嵌套

dic= {'name':['alex','wusir','xinchen'],'py9':{'time':'1213','study_fee':19800,'addr':'CBD',? ? },'age':21}

dic['age'] = 56 # 找到age宋雏,再更新為56print(dic)?dic['name'].append('rt')? ? #找到name,在添加名字print(dic)?dic['name'][1] = dic['name'][1].upper() #找到name务豺,再把wusir變?yōu)榇髮憄rint(dic)?dic['py9']['female'] = 6? ? #找到元祖磨总,增加鍵值對female:6print(dic)

應(yīng)用實例:

#輸入一串字符,遇到字母笼沥,轉(zhuǎn)換為‘_’,并打印輸出

info= input('請輸入:')for i ininfo:? ? if i.isalpha():info=info.replace(i,'_')print(info)

  運(yùn)行結(jié)果:

四蚪燕、集合

集合 類似于列表,但每個元素都必須是獨一無二且不可變的:

它是無序的

基本操作

print(set1)? ? #{1,2,3}?set2 = {1,2,3,[2,3],{'name':'xc'}}? #列表是可變的(不可哈希)奔浅,所以出錯print(set2)? ? #TypeError: unhashabletype:'list'

1. 集合——增

add

set1 = {'alex','wusir','ritian','egon','barry'}# (1)add? ? #因為集合是無序的馆纳,所以每次運(yùn)行結(jié)果不一定一樣,增加的位置也不一定一樣set1.add('nvshen')? #{'ritian','nvshen','egon','wusir','alex','barry'}print(set1)

update

set1.update('xc')? #迭代添加汹桦,依然是無序的print(set1) #{'egon','x','wusir','nvshen','c','alex','ritian','barry'}

2. 集合——刪

set1= {'alex','wusir','ritian','egon','barry'}

pop--隨機(jī)刪除

print(set1.pop())? #egon:有返回值鲁驶,返回本次刪除的內(nèi)容?print(set1)? ? #{'barry','alex','wusir','ritian'}

remove——指定元素刪除

set1.remove('alex')print(set1)? ? #{'egon','wusir','barry','ritian'}

clear——清空

set1.clear()print(set1)? ? #空集合:set()

del

del set1? ? ? ? ?#刪除之后集合不存在,報錯print(set1)? ? #NameError: name'set1'is not defined

3.集合不能改

集合是無序舞骆;

集合中的元素是不可變數(shù)據(jù)類型

4. 集合——查

set1= {'alex','wusir','ritian','egon','barry'}for i in set1:? ? print(i)

  運(yùn)行結(jié)果:

5. 集合之間的操作

set1= {1,2,3,4,5}set2 = {4,5,6,7,8}

交集

print(set1 & set2)? ? ? #(1) {4,5}?print(set1.intersection(set2))? ? ? #(2) {4,5}

并集

print(set1 | set2)? ? ? ? ? #(1) {1,2,3,4,5,6,7,8}?print(set1.union(set2))? ? #(2) {1,2,3,4,5,6,7,8}

反交集--除交集以外的其他元素

print(set1 ^ set2)? ? ? ? ? #(1) {1,2,3,6,7,8}?print(set1.symmetric_difference(set2))? ? #(2) {1,2,3,6,7,8}

差集--前者獨有的

print(set1 - set2)? ? ? ? ? ? ? #(1) {1,2,3}print(set1.difference(set2))? ? #(2) {1,2,3}print(set2 - set1)? ? ? ? ? ? ? #(1) {8,6,7}print(set2.difference(set1))? ? #(2) {8,6,7}

子集與超集

set3 = {1,2,3,4,5}set4 = {1,2,3,4,5,6,7,8}print('------ set3是set4的子集 ------')print(set3 < set4)? ? ? #Trueprint(set3.issubset(set4))? #True?print('------ set4是set3的超集 ------')print(set4 > set3)? ? ? #Trueprint(set4.issuperset(set3))? #True

五钥弯、公共方法

排序

正向排序:sort()

li= [1,5,4,2,6,7,3]li.sort()print(li)#[1, 2, 3, 4, 5, 6, 7]

倒序排序:li.sort(reverse = True)

li= [1,5,4,2,6,7,3]li.sort(reverse =True)print(li)#[7, 6, 5, 4, 3, 2, 1]

反轉(zhuǎn):li.reverse()

li= [1,5,4,2,6,7,3]li.reverse()print(li)#[3, 7, 6, 2, 4, 5, 1]

補(bǔ)充:

字符串列表排序——根據(jù)字符串的第一個字符對應(yīng)的ASCII碼排序

li = ['ojhy','asa','cvd','hdk']li.sort()print(li)? #['asa','cvd','hdk','ojhy']

count() 數(shù)元素出現(xiàn)的次數(shù)

li= ['xcsd','cdc','木木',[1,5,2],'eht','木木']num = li.count('木木')?print(num)#2:'木木'出現(xiàn)2次

len() 計算列表的長度

li= ['xcsd','cdc','木木',[1,5,2],'eht','木木']l = len(li)print(l)#6:列表長度為6

li.index('元素') 查看索引

li= ['xcsd','cdc','辛辰',[1,5,2],'eht','辛辰']print(li.index('eht'))#4:'eht'的索引為4元祖

六. 區(qū)別與異同

列表list元組 tuple集合 set 字典 dict可否讀寫 讀寫 只讀讀寫 讀寫可否重復(fù)是是否是存儲方式值值

(不能重復(fù))

鍵值對

(鍵不能重復(fù))

是否有序有序有序無序自動正序初始化[1,'a'] ('a', 1)

set([1,2])

或 {1,2}

{'a':1,'b':2}添加 append 只讀 add d['key'] = 'value'讀元素 l[2:] t[0] 無 d['a']

最后多說一句,想學(xué)習(xí)Python可聯(lián)系小編督禽,這里有我自己整理的整套python學(xué)習(xí)資料和路線脆霎,想要這些資料的都可以進(jìn)q裙947618024領(lǐng)取。

本文章素材來源于網(wǎng)絡(luò)狈惫,如有侵權(quán)請聯(lián)系刪除睛蛛。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市虱岂,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌菠红,老刑警劉巖第岖,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異试溯,居然都是意外死亡蔑滓,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進(jìn)店門遇绞,熙熙樓的掌柜王于貴愁眉苦臉地迎上來键袱,“玉大人,你說我怎么就攤上這事摹闽√憧В” “怎么了?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵付鹿,是天一觀的道長澜汤。 經(jīng)常有香客問我蚜迅,道長,這世上最難降的妖魔是什么俊抵? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任谁不,我火速辦了婚禮,結(jié)果婚禮上徽诲,老公的妹妹穿的比我還像新娘刹帕。我一直安慰自己,他們只是感情好谎替,可當(dāng)我...
    茶點故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布偷溺。 她就那樣靜靜地躺著,像睡著了一般院喜。 火紅的嫁衣襯著肌膚如雪亡蓉。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天喷舀,我揣著相機(jī)與錄音砍濒,去河邊找鬼。 笑死硫麻,一個胖子當(dāng)著我的面吹牛爸邢,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播拿愧,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼杠河,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了浇辜?” 一聲冷哼從身側(cè)響起券敌,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎柳洋,沒想到半個月后待诅,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡熊镣,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年卑雁,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片绪囱。...
    茶點故事閱讀 39,703評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡测蹲,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出鬼吵,到底是詐尸還是另有隱情扣甲,我是刑警寧澤,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布齿椅,位于F島的核電站文捶,受9級特大地震影響荷逞,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜粹排,卻給世界環(huán)境...
    茶點故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一种远、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧顽耳,春花似錦坠敷、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至胰耗,卻和暖如春限次,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背柴灯。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工卖漫, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人赠群。 一個月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓羊始,卻偏偏與公主長得像,于是被迫代替她去往敵國和親查描。 傳聞我的和親對象是個殘疾皇子突委,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,601評論 2 353