天天看點

【Python】Python中的資料結構

Python中的資料結構

這裡總結一下Python中的内置資料結構(Built-in Data Structure):清單list、元組tuple、字典dict、集合set,涵蓋的僅有部分重點,詳細地去介紹每個知識點并未涉及。

清單list

list的顯著特征

  • 清單中的每個元素都可變的

    意味着可以對每個元素進行修改和删除

  • 清單是有序的,每個元素的位置是确定的,可以用索引去通路每個元素
  • 清單中的元素可以是 Python中的任何對象 可以為任意對象就意味着元素可以是字元串、整數、元組、也可以是list等Python中的對象。
>>> x = [1,2,3]
>>> y = {'name':'Sakura'}
>>> z="Test"
>>> a=[x,y,z]
>>> a
[[1, 2, 3], {'name': 'Sakura'}, 'Test']
           

覺得Python中的list和C語言中的數組蠻像的,隻是list中的元素類型可以為Python中的任意對象,C中的數組隻能是同種類型。當通路他們中的元素時,都可采用索引。這裡需要注意的是,list不僅可以向數組那樣正向索引也可以反向索引。

list中的正反索引

   

【Python】Python中的資料結構

list中的增删查改

list中有很多的方法,這裡僅介紹對list中元素進行增删查改的方法。

  1. 利用insert()和分片将元素添加到指定位置 , 利用remove()和關鍵字del對

    元素進行删除

    需要注意分片[a:b]中的位置不包含位置b,利用[a,a]可以将元素添加至a位置

【Python】Python中的資料結構
【Python】Python中的資料結構
  1. 利用正反索引對元素進行查找
  2. 對元素修改可以直接指派替換
  3. 清單中還有其他方法如pop()删除末尾元素,pop(i)删除指定位置i的元素,append()向末尾添加元素
list函數

可以通過list将序列建立為清單

Python中包含6中內建的序列:清單,元組,字元串、Unicode字元串、buffer對象和xrange對象。

>>> list("Hello,world")
['H', 'e', 'l', 'l', 'o', ',', 'w', 'o', 'r', 'l', 'd']
           

其實list為一種類型并非函數,但此處二者并無多大差別。下面的tuple、dict都如此。

元組tuple

  1. 元組可以了解為一個固定的清單,一旦初始化其中的元素便不可修改(認真了解這句話),隻能對元素進行查詢
>>> test=(1,2,3)
>>> test
(1, 2, 3)
>>> test[1]=4
Traceback (most recent call last):
  File "<input>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
>>> test[1:1] = 4
Traceback (most recent call last):
  File "<input>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
>>> test[1]
2
           

  從上可知,tuple不支援對元素的修改(包括删除),tuple一初始化便固定下來了。

  再來看一個例子。

>>> test=('a','b',['A','B'])
>>> print(test)
('a', 'b', ['A', 'B'])
>>> test[2][0]='x'
>>> test[2][1]='y'
>>> test
('a', 'b', ['x', 'y'])

           

  這裡看似元素中的元素改變了,可是仔細分析下,元組中的第三個元素是一個清單。

  代碼3.4行改變的是清單中的值,元組所指的這個元素清單并沒有改變,需要注意這點!

  這就涉及到Python中的可變對象和不可變對象,像list這樣的就是可變對象,tuple便是不可變對象。

  1. 元組是固定的清單,那麼元組的意義何在呢?

    因為tuple不可變,是以代碼更安全。如果可能,能用tuple代替list就盡量用tuple

    并且需要注意元組中元素的可變性!!

  2. 空的tuple可以記為(),若隻有一個元素的tuple記為(1,)

    因為記為(1)的話,這個實際代表的是數字1,此時()是數學公式中的小括号

  3. 因為元組是固定的清單,是以其内置的大多數的方法和清單是差不多的。
  4. 可以通過tuple将序列轉換為元組,用法和list一樣
>>> tuple('Hello,world!')
('H', 'e', 'l', 'l', 'o', ',', 'w', 'o', 'r', 'l', 'd', '!')
           

字典dict

字典這個概念就是基于現實生活中的字典原型,生活中的使用名稱-内容對資料進行建構,Python中使用鍵(key)-值(value)存儲,也就是C++中的map。

dict的顯著特征

  • 字典中的資料必須以鍵值對的形式出現
  • 鍵不可重複,值可重複

    鍵若重複字典中隻會記該鍵對應的最後一個值

  • 字典中鍵(key)是不可變的,為不可變對象,不能進行修改;而值(value)是可以修改的,可以是任何對象。

    在dict中是根據key來計算value的存儲位置,如果每次計算相同的key得出的結果不同,那dict内部就完全混亂了。

dict的增删查改

  1. 可以采用“鍵值對”的方法和update()方法向字典中添加元素

    删除可以使用關鍵字del以及pop()方法

【Python】Python中的資料結構
  1. 查詢采用如查詢清單元素的索引方式,使用鍵作為索引查找值

    若元素不存在會報錯,在進行查找前,可以通過以下兩種方法判斷key是否存在:

    ① 成員資格運算符--in運算符

    ② get()方法(值不存在時傳回NULL,也可指定傳回的值)

>>> test={'Mon':1}
>>> 'Fri' in test
False
>>> test.get('Fri')
>>> test.get('Fri',-1)
-1
           
  1. 對值得修改可以采用直接覆寫原值的方法
  2. dict中的元素是無序的,不可以采用分片。

dict函數

可以使用dict,通過其他映射或者(鍵,值)對的序列建立字典。

>>> test=[('name','Sakura'),('age',20)]
>>> d = dict(test)
>>> d
{'name': 'Sakura', 'age': 20}
           

dict也可以使用關鍵字參數建立字典,也可用映射作為dict參數,dict若不帶任何參數,将傳回一個空字典

>>> d = dict(name='Sakura',age=20)
>>> d
{'name': 'Sakura', 'age': 20}
>>> a=dict()
>>> a
{}
           

集合set

集合更接近數學上集合的概念。集合中每個元素都是無序的、不重複的任意對象。

可以通過集合去判斷資料的從屬關系,也可以通過集合把資料結構中重複的元素減掉。集合可做集合運算,可添加和删除元素。

集合的建立

建立集合時需要用list作為輸入集合,可通過add()方法增加元素,remove()方法删除元素

>>> test=set([1,2,3])
>>> test
{1, 2, 3}
>>> test.add(3)
>>> test
{1, 2, 3}
>>> test.add(6)
>>> test
{1, 2, 3, 6}
>>> test.remove(3)
>>> test
{1, 2, 6}
           

集合中重複的元素會被過濾掉

集合運算

Python中的集合也可以進行集合的之間的交、并等運算

>>> s1 = set([1,2])
>>> s2=set([2,3])
>>> s1 & s2  # s1與s2
{2}
>>> s1 | s2  # s1與s2進行或運算
{1, 2, 3}
           

每天進步一點點,不要停止前進的腳步~