Python中的數據結構

Python中的數據結構

這裏總結一下Python中的內置數據結構(Built-in Data Structure):列表list、元組tuple、字典dict、集合set,涵蓋的僅有部分重點,詳細地去介紹每一個知識點並未涉及。python

列表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中元素進行增刪查改的方法。
app

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

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

   

   

  1. 利用正反索引對元素進行查找函數

  2. 對元素修改能夠直接賦值替換ui

  3. 列表中還有其餘方法如pop()刪除末尾元素,pop(i)刪除指定位置i的元素,append()向末尾添加元素code

list函數

能夠經過list將序列建立爲列表

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

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

其實list爲一種類型並不是函數,但此處兩者並沒有多大區別。下面的tuple、dict都如此。blog

元組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}
相關文章
相關標籤/搜索