Python從入門(mén)到實(shí)戰(zhàn)之?dāng)?shù)據(jù)結(jié)構(gòu)篇
前言
我是栗子——專為小白準(zhǔn)備《Python從入門(mén)到實(shí)戰(zhàn)》內(nèi)容。
這不是上一期剛講完循環(huán)判斷,還給大家出了很多新手的題目,邊學(xué)邊練習(xí)才有效果嘛。
時(shí)隔幾天,大家都吼完了叭~實(shí)在沒(méi)寫(xiě)完的慢慢復(fù)習(xí),我更新文章也挺慢的!哈哈哈哈
今天想一想:要學(xué)數(shù)據(jù)結(jié)構(gòu)啦~
一、Python有那幾種數(shù)據(jù)結(jié)構(gòu)?
Python 有四種數(shù)據(jù)結(jié)構(gòu),分別是:列表、字典、元組,集合。每種數(shù)據(jù)結(jié)構(gòu)都有自己的特點(diǎn),并且都有著獨(dú)到的用處。為了避免過(guò)早地陷入細(xì)枝末節(jié)。
我們先從整體上來(lái)認(rèn)識(shí)一下這四種數(shù)據(jù)結(jié)構(gòu):從最容易識(shí)別的特征上來(lái)說(shuō),列表中的元素使用方括號(hào)擴(kuò)起來(lái),字典和集合是花括號(hào),而元組則是圓括號(hào)。其中字典中的元素是均帶有 ‘:'
的 key 與 value 的對(duì)應(yīng)關(guān)系組。
1)列表(list)
1.1 什么是列表?
最顯著的特征是:
- 列表中的每一個(gè)元素都是可變的;
- 列表中的元素是有序的,也就是說(shuō)每一個(gè)元素都有一個(gè)位置;
- 列表可以容納 Python 中的任何對(duì)象。
列表中的元素是可變的,這意味著我們可以在列表中添加、刪除和修改元素。
輸入:
Weekday = ['Monday','Tuesday','Wednesday','Thursday','Friday'] print(Weekday[0])
第三個(gè)特征是列表可以裝入 Python 中所有的對(duì)象,往下看:
all_in_list = [ 1, #整數(shù) 1.0, #浮點(diǎn)數(shù) 'a word', #字符串 print(1), #函數(shù) True, #布爾值 [1,2], #列表中套列表 (1,2), #元組 {'key':'value'} #字典 ]
1.2列表的增刪改查
對(duì)于數(shù)據(jù)的操作,最常見(jiàn)的是增刪改查這四類。從列表的插入方法開(kāi)始,輸入:
fruit = ['pineapple','pear'] fruit.insert(1,'grape') print(fruit)
在使用 insert
方法的時(shí)候,必須指定在列表中要插入新的元素的位置,插入元素的實(shí)際位置是在指定位置元素之前的位置,如果指定插入的位置在列表中不存在,實(shí)際上也就是超出指定列表長(zhǎng)度,那么這個(gè)元素一定會(huì)被放在列表的最后位置。
- 其他方法達(dá)到“插入”的效果:
fruit[0:0] = ['Orange'] print(fruit)
- 刪除列表中元素的方法是使用 remove():
fruit = ['pinapple','pear','grape'] fruit.remove('grape') print(fruit)
- 替換修改其中的元素:
fruit[0] = 'Grapefruit'
- 刪除還有一種方法,那就是使用 del 關(guān)鍵字來(lái)聲明:
del fruit[0:2] print(fruit)
2)字典(Dictionary)
2.1 什么是字典?
字典這種數(shù)據(jù)結(jié)構(gòu)的特征也正如現(xiàn)實(shí)世界中的字典一樣,使用名稱-內(nèi)容進(jìn)行數(shù)據(jù)的構(gòu)建,在 Python 中分別對(duì)應(yīng)著鍵(key)-值(value),習(xí)慣上稱之為鍵值對(duì)。
字典的特征總結(jié)如下:
- 字典中數(shù)據(jù)必須是以鍵值對(duì)的形式出現(xiàn)的;
- 邏輯上講,鍵是不能重復(fù)的,而值可以重復(fù);
- 字典中的鍵(key)是不可變的,也就是無(wú)法修改的;而值(value)是可變的,可修改的,可以是任何對(duì)象。
舉個(gè)小栗子:
這是字典的書(shū)寫(xiě)方式: NASDAQ_code = { 'BIDU':'Baidu', 'SINA':'Sina', 'YOKU':'Youku' }
一個(gè)字典中鍵與值并不能脫離對(duì)方而存在,如果你寫(xiě)成 {'BIDU':}
會(huì)引發(fā)語(yǔ)法錯(cuò)誤。
記住這兩個(gè)特征: key 和 value 是一一對(duì)應(yīng)的,key 是不可變的。
同時(shí)字典中的鍵值不會(huì)有重復(fù),即便你這么做,相同的鍵值也只能出現(xiàn)一次:
a = {'key':123,'key':123} print(a)
2.2 字典的增刪改查
首先我們按照映射關(guān)系創(chuàng)建一個(gè)字典:
NASDAQ_code = {'BIDU':'Baidu','SINA':'Sina'}
與列表不同的是,字典并沒(méi)有一個(gè)可以往里面添加單一元素的“方法”,但是我們可以通過(guò)這種方式進(jìn)行添加:
NASDAQ_code['YOKU'] = 'Youku' print(NASDAQ_code)
列表中有用來(lái)添加多個(gè)元素的方法 extend() ,在字典中也有對(duì)應(yīng)的添加多個(gè)元素的方法 update()
:
NASDAQ_code.update({'FB':'Facebook','TSLA':'Tesla'})
刪除字典中的元素則使用 del
方法:
del NASDAQ_code['FB']
需要注意的是,雖說(shuō)字典是使用的花括號(hào),在索引內(nèi)容的時(shí)候仍舊使用的是和列表一樣的方括號(hào)進(jìn)行索引,只不過(guò)在括號(hào)中放入的一定是——字典中的鍵,也就是說(shuō)需要通過(guò)鍵來(lái)索引值:
NASDAQ_code['TSLA']
同時(shí),字典是不能夠切片的,也就是說(shuō)下面這樣的寫(xiě)法應(yīng)用在字典上是錯(cuò)誤的:
chart[1:4] # WRONG!
3)元組(Tuple)
元組其實(shí)可以理解成一個(gè)穩(wěn)固版的列表,因?yàn)樵M是不可修改的,因此在列表中的存在的方法均不可以使用在元組上,但是元組是可以被查看索引的,方式就和列表一樣:
letters = ('a','b','c','d','e','f','g') letter[0]
4)集合(Set)
4.1什么是集合?
每一個(gè)集合中的元素是無(wú)序的、不重復(fù)的任意對(duì)象,我們可以通過(guò)集合去判斷數(shù)據(jù)的從屬關(guān)系,有時(shí)還可以通過(guò)集合把數(shù)據(jù)結(jié)構(gòu)中重復(fù)的元素減掉。
集合不能被切片也不能被索引,除了做集合運(yùn)算之外,集合元素可以被添加還有刪除:
a_set = {1,2,3,4} a_set.add(5) a_set.discard(5)
5)番外——數(shù)據(jù)結(jié)構(gòu)的一些技巧
5.1多重循環(huán)
舉個(gè)栗子:比如,在整理表格或者文件的時(shí)候會(huì)按照字母或者日期進(jìn)行排序,在 Python 中也存在類似的功能。
num_list = [6,2,7,4,1,3,5] print(sorted(num_list))
sorted
函數(shù)按照長(zhǎng)短、大小、英文字母的順序給每個(gè)列表中的元素進(jìn)行排序。這個(gè)函數(shù)會(huì)經(jīng)常在數(shù)據(jù)的展示中使用,其中有一個(gè)非常重要的地方,sorted
函數(shù)并不會(huì)改變列表本身,你可以把它理解成是先將列表進(jìn)行復(fù)制,然后再進(jìn)行順序的整理。
在使用默認(rèn)參數(shù) reverse 后列表可以被按照逆序整理:
sorted(num_list,reverse=True)
在整理列表的過(guò)程中,如果同時(shí)需要兩個(gè)列表應(yīng)該怎么辦?這時(shí)候就可以用到 zip
函數(shù),比如:
for a,b in zip(num,str): print(b,'is',a)
5.2推導(dǎo)式
數(shù)據(jù)結(jié)構(gòu)中的推導(dǎo)式,也許你還看到過(guò)它的另一種名稱叫做列表的解析式。
現(xiàn)在我有10個(gè)元素要裝進(jìn)列表中,普通的寫(xiě)法是這樣的:
a = [] for i in range(1,11): a.append(i)
下面換成列表解析的方式來(lái)寫(xiě):
b = [i for i in range(1,11)]
列表解析式不僅非常方便,并且在執(zhí)行效率上要遠(yuǎn)遠(yuǎn)勝過(guò)前者,我們把兩種不同的列表操作方式所耗費(fèi)的時(shí)間進(jìn)行對(duì)比,就不難發(fā)現(xiàn)其效率的巨大差異:
import time a = [] t0 = time.clock() for i in range(1,20000): a.append(i) print(time.clock() - t0, seconds process time") t0 = time.clock() b = [i for i in range(1,20000)] print(time.clock() - t0, seconds process time")
得到結(jié)果:
8.999999999998592e-06 seconds process time
0.0012320000000000005 seconds process time
列表推導(dǎo)式的用法也很好理解,可以簡(jiǎn)單地看成兩部分。紅色虛線后面的是我們熟悉的 for 循環(huán)的表達(dá)式,而虛線前面的可以認(rèn)為是我們想要放在列表中的元素,在這個(gè)例子中放在列表中的元素即是后面循環(huán)的元素本身。
5.3循環(huán)列表時(shí)獲取元素的索引
現(xiàn)在我們有一個(gè)字母表,如何能像圖中一樣,在索引的時(shí)候得到每個(gè)元素的具體位置的展示呢?
letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
a is 1 b is 2 c is 3 d is 4 e is 5 f is 6 g is 7
前面提到過(guò),列表是有序的,這時(shí)候我們可以使用 Python 中獨(dú)有的函數(shù) enumerate 來(lái)進(jìn)行:
letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g'] for num,letter in enumerate(letters): print(letter,'is',num + 1)
結(jié)尾
你學(xué)廢了嘛?等過(guò)幾天你學(xué)廢了,記得評(píng)論吱一聲,到時(shí)候我再更新~哈哈哈
快來(lái)跟我一起學(xué)習(xí)吧!關(guān)注小編,每天更新精彩內(nèi)容哦~
到此這篇關(guān)于Python從入門(mén)到實(shí)戰(zhàn)之?dāng)?shù)據(jù)結(jié)構(gòu)篇的文章就介紹到這了,更多相關(guān)Python 數(shù)據(jù)結(jié)構(gòu)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
基于python實(shí)現(xiàn)上傳文件到OSS代碼實(shí)例
這篇文章主要介紹了基于python實(shí)現(xiàn)上傳文件到OSS,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-05-05詳解Python模塊化--模塊(Modules)和包(Packages)
這篇文章主要介紹了使用Python的模塊(Modules)和包(Packages),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-08-08python使用Psutil模塊實(shí)現(xiàn)獲取計(jì)算機(jī)相關(guān)信息
psutil 是一個(gè)跨平臺(tái)的庫(kù),用于獲取進(jìn)程和系統(tǒng)運(yùn)行狀態(tài)的信息,這篇文章主要為大家詳細(xì)介紹了python如何調(diào)用psutil模塊實(shí)現(xiàn)獲取計(jì)算機(jī)相關(guān)信息,有需要的小伙伴可以了解下2023-11-11在python 中實(shí)現(xiàn)運(yùn)行多條shell命令
今天小編就為大家分享一篇在python 中實(shí)現(xiàn)運(yùn)行多條shell命令,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-01-01圖文詳解梯度下降算法的原理及Python實(shí)現(xiàn)
梯度下降是迭代法的一種,可以用于求解最小二乘問(wèn)題(線性和非線性都可以)。本文將通過(guò)圖文詳解梯度下降算法的原理及實(shí)現(xiàn),需要的可以參考一下2022-08-08Flask Web開(kāi)發(fā)入門(mén)之文件上傳(八)
這篇文章主要為大家詳細(xì)介紹了Flask Web開(kāi)發(fā)入門(mén)之文件上傳的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-08-08一篇文章弄懂Python中的可迭代對(duì)象、迭代器和生成器
這篇文章主要給大家介紹了關(guān)于Python中可迭代對(duì)象、迭代器和生成器的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08Python設(shè)計(jì)模式之代理模式實(shí)例詳解
這篇文章主要介紹了Python設(shè)計(jì)模式之代理模式,結(jié)合實(shí)例形式較為詳細(xì)的分析了代理模式的概念、原理及Python定義、使用代理模式相關(guān)操作技巧,需要的朋友可以參考下2019-01-01