【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中的正反索引


   

list中的增刪查改

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

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

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

   

   

  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()方法

   

  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}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM