python數據結構:數據類型

1.數據是什麼?

Python 以及其他所有面向對象編程語言中,類都是對數據的構成(狀態)以及數據 能做什麼(行為)的描述。由於類的使用者隻能看到數據項的狀態和行為,因此類與抽象數據類 型是相似的。在面向對象編程范式中,數據項被稱作對象。一個對象就是類的一個實例。

2.數據類型

2.1內建原子數據類型

Python 有兩大內建數據類實現瞭整數類型和浮點數類型,相應的 Python 類就是 int float。標準的數學運算符,即+、-、*、/以及**(冪),可以和能夠改變運算優先級的括號一起使用。其他非常有用的運算符包括取餘(取模)運算符%,以及整除運算符//。註意,當兩個整數相除時,其結果是一個浮點數,而整除運算符截去小數部分,隻返回商的整數部分。
Python 通過 bool 類實現對表達真值非常有用的佈爾數據類型。佈爾對象可能的狀態值是 True 或者 False,佈爾運算符有 and、or 以及 not。

其實這一章最想讓大傢知道的變量賦值的問題:

 theSum = 0

賦值語句 theSum = 0 會創建變量 theSum,並且令其保存指向數據對象 0 的引用。Python 會先計算賦值運算符右邊的表達式,然後將指向該結果數據對象的引用賦給左 邊的變量名。在本例中,由於 theSum 當前指向的數據是整數類型,因此該變量類型為整型。

在這裡插入圖片描述

如果數據發生瞭變化怎麼辦,比如:

theSum=True


這個時候變量的類型也會變成佈爾類型。賦值語句改變瞭變量的引用,這體現瞭 Python 的動態特性。同樣的變量 可以指向許多不同類型的數據。

在這裡插入圖片描述

2.2 內建集合數據類型

除瞭數值類和佈爾類,python還有眾多強大的內建集合類。我們將它們分為兩類:

  • 有序集合:列表、字符串、元祖
  • 無需集合:集合、字典

在這裡插入圖片描述

說明一下,有序集合中有些方法是可以相互通用的,因為它們的性質很相似。無需集合也是一樣,但是它們都是屬於數據集合,會有一些大傢公共的方法。

3.集合數據類型的方法

這一章節主要講述列表、字符串、元祖、集合、字典各自的內置函數。
在這之前先介紹一下range函數。
range 是一個常見的 Python 函數,我們常把它與列表放在一起討論。range 會生成一個代 表值序列的范圍對象。使用 list 函數,能夠以列表形式看到范圍對象的值。
rang的一些用法。

range(10)#默認從0開始
#結果range(0, 10)
list(range(10))
#[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
range(5,10)
#結果range(5, 10)
list(range(5,10))
#[5, 6, 7, 8, 9]
list(range(5,10,2))
#[5, 7, 9]
list(range(10,1,-1))
#[10, 9, 8, 7, 6, 5, 4, 3, 2]

3.1 列表

列表是零個或多個指向 Python 數據對象的引用的有序集合,通過在方括號內以逗號分隔的一 系列值來表達。空列表就是[]。列表是異構的,這意味著其指向的數據對象不需要都是同一個類, 並且這一集合可以被賦值給一個變量。

在這裡插入圖片描述

舉例:

#列表
mylist=[1,3,True,6.5]
#結果:[1, 3, True, 6.5]
mylist[0]
#結果 1
mylist[2]+mylist[1]
#結果 4
mylist[1:3]#隻顯示index為1,2
#結果 [3, True]
for i in mylist:
    print(i)
#結果 

True
6.5
mylist.append(9)
#[1, 3, True, 6.5, 9]
mylist.insert(1,2)#在index為1的位置插入2
#[1, 2, 3, True, 6.5, 9]
mylist.pop()#刪除並返回最後一個數
# 結果 9
mylist.pop(1)#刪除並返回index為1的數
#結果 2
mylist.sort()#排序
#[1, True, 3, 6.5]
mylist.reverse()#反轉數組
#[6.5, 3, True, 1]
del mylist[1]#刪除index為1的元素
mylist.index(1)# 返回元素為1的元素下標
mylist.insert(1,9)#在index位置插入元素9
mylist.count(9)#返回9在數組中出現的次數
mylist.remove(9)#移除元素9

3.2 字符串

字符串是零個或多個字母、數字和其他符號的有序集合。這些字母、數字和其他符號被稱為 字符。常量字符串值通過引號(單引號或者雙引號均可)與標識符進行區分。

在這裡插入圖片描述

舉例:

myname="aaron"
#結果 aaron
myname.upper()#轉化大寫
#結果 'AARON'
myname.center(10)#填充空格
#結果為'  aaron   '
myname.find("r")
#結果為 2
myname.split("r")#分割子串,如果沒有提供分隔字符,那麼 split 方法將會尋找如制表符、換行符和空格等空白字符。
#結果為 ['aa', 'on']

總結:列表和字符串的主要區別在於,列表能夠被修改,字符串則不能。列表的這一特性被稱為可修改性。列表具有可修改性,字符串則不具有。例如,可以通過使用下標和賦值操作來修改列表中的一個元素,但是字符串不允許這一改動。

看一下:

在這裡插入圖片描述

3.3 元祖

元組與列表非常相似。它們的區別在於,元組和字符串一樣是 不可修改的。元組通常寫成由括號包含並且以逗號分隔的一系列值。與序列一樣,元組允許之前 描述的任一操作。

舉例:

mytuple=(2,True,4.96)
#(2, True, 4.96)
len(mytuple)
#結果 3
mytuple[2]
#結果 4.96

註意:元祖不可修改

在這裡插入圖片描述

3.4 集合

集合是由零個或多個不可修改的 Python 數據對象組成的無序集合。集不允許重復元素, 並且寫成由花括號包含、以逗號分隔的一系列值。

在這裡插入圖片描述

舉例:

myset={3,6,"dog","cat",False}
#{3, 6, False, 'cat', 'dog'}
len(myset)
#結果 5
False in myset #false是否在集合中
#結果 true
'pink' in myset
#結果 false

在這裡插入圖片描述

舉例:

myset
#{3, 6, False, 'cat', 'dog'}
yourset={99,3,100}
#{3, 99, 100}
myset.union(yourset)#取並級
#{100, 3, 6, 99, False, 'cat', 'dog'}
myset | yourset#取並集
#{100, 3, 6, 99, False, 'cat', 'dog'}
myset.intersection(yourset)#取交集
#{3}
myset.difference(yourset)#取差集
#{6, False, 'cat', 'dog'}
myset-yourset#取差集
#{6, False, 'cat', 'dog'}
{99,100}.issubset(yourset)#判斷是否為子集
#True
{99,100}<=yourset#判斷是否為子集
#True
myset.add(101)
#{101, 3, 6, False, 'cat', 'dog'}
myset.remove(101)#移除元素
#{3, 6, False, 'cat', 'dog'}
myset.pop()#隨機移除元素(這裡移除瞭false)
#False
myset.clear()#清空集合
#set()

3.5 字典

在這裡插入圖片描述

字典是無序結構,由相關的元素對構成,其中每對元素都由一個鍵和一個值組成。這種鍵–值對通常寫成鍵:值的形式。字典由花括號包含的一系列以逗號分隔的鍵–值對表達。

舉例:

mydict={"name":"aaron","sex":"man"}
#{'name': 'aaron', 'sex': 'man'}
mydict["name"]
#'aaron'
mydict["old"]=18#添加一對key- value
#{'name': 'aaron', 'sex': 'man', 'old': 18}
len(mydict)
#3
mydict.get("sex")
#'man'
mydict.get("class","不存在")#如果前面的不存在,就返回第二個
#'不存在'

參考資料:

  • 《python數據結構與算法》
  • 《大話數據結構》

到此這篇關於python數據結構:數據類型的文章就介紹到這瞭,更多相關python數據類型內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: