python應(yīng)用(5):變量類型與數(shù)據(jù)結(jié)構(gòu)
如前所說,寫程序如同給算法寫殼,而算法就是流程,所以流程是程序的主角(但這個(gè)流程不一定要你來設(shè)計(jì))。在程序中,為了配合流程(算法)的實(shí)現(xiàn),除了順序、分支與循環(huán)語句的使用,還要借助“變量”這個(gè)角色。變量是重要的角色,男二號。
變量表示可變化的值,但這個(gè)值是有范圍的,并不是所有值都可以放置到同一個(gè)變量中,值的范圍,由變量的類型決定。
變量的類型,決定兩個(gè)事情,一是用多大的空間來存儲這個(gè)變量值,二是這個(gè)變量值的范圍是多少。好了,這個(gè)不重要,先不要管這個(gè)細(xì)節(jié),先把變量用起來,并掌握一些基礎(chǔ)知識即可。
變量有哪些類型呢?
(1)數(shù)字類型、bool與字符串
這三個(gè)是常見的內(nèi)置類型。
注意,值,決定了變量的類型,你給變量賦什么值,它就是什么類型。比如:

上幾個(gè)變量類型,分別是int、float、long跟complex類型,這幾個(gè)類型可以歸為數(shù)字類型。
除了數(shù)字類型,python中的值還有bool類型跟str字符串類型,比如:

果想知道當(dāng)前變量是什么類型,那可以使用內(nèi)置函數(shù)(python提供的一組函數(shù))type()來確認(rèn),比如可以這樣,留意type()的輸出:

所以,基本上,python的變量類型,包括數(shù)字類型(int/float/long/complex)、bool跟str。
其中,str,即字符串,對它的操作會經(jīng)常遇到,比如:

行效果:

(2)常見的數(shù)據(jù)結(jié)構(gòu)
除了以上常見的內(nèi)置變量類型,pyton還提供了一些常用的數(shù)據(jù)結(jié)構(gòu),這些數(shù)據(jù)結(jié)構(gòu)也是變量類型。
數(shù)據(jù)結(jié)構(gòu)服務(wù)于算法,但由于某些數(shù)據(jù)結(jié)構(gòu)實(shí)在太常用了,以至于很多算法都有它們的身影,于是,把這些常用的數(shù)據(jù)結(jié)構(gòu)抽離出來,做為一個(gè)獨(dú)立的結(jié)識點(diǎn)來講,也是很合理的,但明顯不是本文的事情。
數(shù)據(jù)結(jié)構(gòu),就是數(shù)據(jù)的組織結(jié)構(gòu),各個(gè)數(shù)據(jù)結(jié)構(gòu)一定會有自己的組織特點(diǎn)。python中有幾個(gè)常見的內(nèi)置的數(shù)據(jù)結(jié)構(gòu),因?yàn)榻?jīng)常使用,甚至已經(jīng)被當(dāng)作變量類型,跟數(shù)字類型、bool與str一樣的存在。
這幾個(gè)常見的數(shù)據(jù)結(jié)構(gòu),分別是:列表、元組、集合、字典。
同樣,值決定類型(或數(shù)據(jù)結(jié)構(gòu))。
list即列表,也是由值定義出來(以[]來定義),比如:

list的操作,跟字符串的類似,比如:?

tuple即元組,是只讀列表(以()來定義),也就是元組的內(nèi)容不允許修改,比如:

行的效果如下:?

list跟tuple的特點(diǎn),是可以存放任意類型的元素,內(nèi)容有序、可重復(fù)。
另一種常見的數(shù)據(jù)結(jié)構(gòu)是set,特點(diǎn)是,可以存放任意類型的元素,內(nèi)容是無序的,而且不能重復(fù),這個(gè)就是集合的特點(diǎn)。
set即集合的部分使用如下(以{}來定義):

行的效果如下:

最后一種數(shù)據(jù)結(jié)構(gòu)是dict,也就是字典。
dict也是一個(gè)集合,是鍵值對(key-value)的集合,同樣以{}來定義,但包括key跟value,比如:
d = {'k1':1, 'k2':2}
dict跟set類似,內(nèi)容無序,而且key不能重復(fù)。set只保留了key(無序且不重復(fù)),而去掉了value。
dict的部分使用如下:

行效果如下:

以上四種內(nèi)置類型之間的轉(zhuǎn)換,有可能在實(shí)際場景中應(yīng)用到,操作上很簡單,只需要用類型名去處理需要轉(zhuǎn)換的值即可,比如:
a = list(set1) # type_name(xxx)
以上是list、tuple、set與dict的簡單介紹,你可以根據(jù)實(shí)際場景去使用它們。
另外,我并沒有介紹這四種數(shù)據(jù)結(jié)構(gòu)的操作函數(shù),實(shí)事上,被抽離封裝的數(shù)據(jù)結(jié)構(gòu)都有一系列操作函數(shù),也就是對象的行為(對象不是指女朋友),比如以上幾種數(shù)據(jù)結(jié)構(gòu),有對應(yīng)的append()、pop()、remove()等一系列的操作,這個(gè)在實(shí)踐中再去理解與運(yùn)用了。
(3)變量類型使用示例
不管是簡單的變量類型(數(shù)字類型等)還是常見的數(shù)據(jù)結(jié)構(gòu)(list等),你都可以把它們歸為變量類型。這些變量類型經(jīng)常被使用,因?yàn)樽兞渴浅绦虻闹匾浣恰?/p>
我在這里舉幾個(gè)示例,都是以list作為棧來解決問題的例子,希望讓你對變量類型有一個(gè)使用上的感知,然后在實(shí)際場景中靈活使用。
(a)判斷左右符號是否配對
左符號:([{
右符號:)]}
配對的情況如:'([]){()}',不配對的情況如:'[{]}]'。
用棧來理解就是:遍歷所有字符。遇左符號則入棧;遇右符號則出棧(如果為空則直接返回False),出棧返回的字符如果與右符號不配對則返回False,如果配對則繼續(xù)下一個(gè)字符。所有字符遍歷完后,棧非空則返回False,否則返回True。

(b)計(jì)算后綴表達(dá)式
計(jì)算一個(gè)表達(dá)式時(shí),表達(dá)式可以以中綴或后綴的方式錄入,而后綴表達(dá)式由于不需要使用括號而簡化了處理,所以是一個(gè)普遍的選擇。
比如:

用棧來理解就是:遍歷所有分割項(xiàng)(以空格切分)。遇到數(shù)字則入棧;遇到操作符出棧兩次(這里簡化為都是二元操作,第一次出棧的為參數(shù)2,第二次為參數(shù)1),并進(jìn)行運(yùn)算,再把結(jié)果入棧。遍歷完所有分割項(xiàng)后,返回棧中內(nèi)容(只有一個(gè)值)。

(c)背包問題
有若干個(gè)物品,每一個(gè)物品都有重量。背包有最大容量限制,求剛好裝滿背包最大容量的所有解。
比如:

棧來理解就是:盡情地裝(按物品順序,只要能裝得下就裝),如果剩余容量剛好為0或者之后的各個(gè)物品都裝不下了,則出棧,即拿掉最后的一個(gè)物品k,再繼續(xù)從k+1個(gè)物品開始裝。在棧為空而且填裝的物品的索引已經(jīng)超出范圍,則結(jié)束循環(huán)。由于,總會一直出棧到一個(gè)物品都沒有,再從下一個(gè)物品開始填裝,所以一定會出現(xiàn)棧為空且沒有物品可裝的情況。

以上是幾個(gè)示例,你可不必關(guān)心算法的設(shè)計(jì),因?yàn)檫@是另外的話題,重點(diǎn)關(guān)心代碼中變量類型的使用,比如list、dict的使用等。
好了,本文介紹了python的變量類型跟常見的數(shù)據(jù)結(jié)構(gòu),你可以把內(nèi)置的數(shù)據(jù)結(jié)構(gòu)也當(dāng)作變量類型。變量類型包括int、float、long、complex、bool、list、tuple、set、dict。文章最后還就list舉了幾個(gè)使用例子,希望可以幫助你理解變量類型的使用。有緣再見,see you。
了解更多,請點(diǎn)擊:https://www.bilibili.com/video/BV1Db411G7aW
作者:廣州小程
鏈接:https://juejin.cn/post/6901183116254117902
來源:掘金
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。