一颜曾、 什么是數(shù)據(jù)結(jié)構(gòu)
在計算機(jī)科學(xué)中寺酪,數(shù)據(jù)結(jié)構(gòu)(英語:data structure)是計算機(jī)中存儲输涕、組織數(shù)據(jù)的方式盐数。
1. Python 中核心數(shù)據(jù)結(jié)構(gòu)分類
- 序列類型: 字符串埂淮、列表姑隅、元組
- 映射類型: 字典
- 集合: set()
在 Python中列表、元組倔撞、字典讲仰、集合都稱為容器。
2. 序列類型數(shù)據(jù)結(jié)構(gòu)共有的特點:
序列類型中的元素都有對應(yīng)的位置痪蝇,這個位置叫偏移量或者索引
偏移量(索引) | 0 | 1 | 2 | 3 | 4 | N-1 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
偏移量(索引) | -N | -N(N-1) | -4 | -3 | -2 | -1 |
二鄙陡、列表
1. 列表的特性介紹
列表內(nèi)的元素是可變的。
列表的元素可以是 Python 的任何類型的數(shù)據(jù)和對象
如:字符串躏啰、列表趁矾、元組、字典给僵、集合毫捣、函數(shù)详拙、類
列表中的具有相同值的元素允許出現(xiàn)多次
如:[1, 2, 1, 1, 1, 1, 3, 3, 2]
2. 創(chuàng)建列表
# 推薦使用 [] 高效
例:
>>> li = []
>>> cc = [ 'chen', 'chao' ]
# 從其他類型轉(zhuǎn)換 list()
>>> list('hello ')
['h', 'e', 'l', 'l', 'o', ' ']
# 從字符串轉(zhuǎn)換 split()
>>> 'c.h.e.n'.split('.')
['c', 'h', 'e', 'n']
嵌套的列表
列表中可包含 python 中任何類型的元素(對象),當(dāng)然也可以包括一個或多個列表
li = [['one', 'two', 'three'], [1, 2, 3]]
3. 列表的基本操作
3.1 取值
沒有嵌套的列表取值
>>> li = ['one', 'two', 'three']
>>> li[0]
'one'
>>>
嵌套的列表取值
>>> li = [['one', 'two', 'three'], [1, 2, 3]]
>>> li[0][2]
'three'
>>>
3.2 切片
同字符串的切片一樣,詳情參考字符串教程中的切片
簡單示例:
>>> li_f = [ 'insert', 'append','extend', 'remove', 'pop', 'sort', 'sorted']
# 獲取全部元素
>>> li_f[:]
['insert', 'append', 'extend', 'remove', 'pop', 'sort', 'sorted']
# 反轉(zhuǎn)
>>> li_f[::-1]
['sorted', 'sort', 'pop', 'remove', 'extend', 'append', 'insert']
>>>
3.3 必會方法
-
len()
方法是一個內(nèi)置函數(shù)蔓同,可以統(tǒng)計序列類型的數(shù)據(jù)結(jié)構(gòu)的長度饶辙。
>>> li = [5, 4, 3, 2, 1, 0]
>>> n = len(li)
>>> print(n)
6
-
in
判斷元素是否存在于列表中。
>>> li = ['chen', 123, '456']
>>> '456' in li
True
>>> 456 in li
False
>>> if 'chen' in li:
... print('presence')
...
presence
-
append()
向列表的最后位置斑粱,添加一個元素弃揽,只接收一個參數(shù)。
>>> li = ['chen', 123, '456']
>>> li.append(789)
>>> li
['chen', 123, '456', 789]
-
insert()
向原列表的指定位置插入一個元素则北,接收兩個參數(shù)矿微,第一個是索引號,第二個是要插入的元素咒锻。
>>> li = ['chen', 123, '456']
>>> li.insert(1, 'chao')
>>> li
['chen', 'chao', 123, '456']
>>> li.insert(-1, 789)
>>> li
['chen', 'chao', 123, 789, '456']
-
extend()
可以把一個序列類型中的每個元素追加到原列表中冷冗,接收的參數(shù)是一個序列類型的數(shù)據(jù)(字符串守屉,列表)惑艇。
>>> li1 = ['chen', 'chao']
>>> li2 = [123, 'test', '456', 789]
>>> li1.extend(li2)
>>> li1
['chen', 'chao', 123, 'test', '456', 789]
>>> li2
[123, 'test', '456', 789]
>>>
-
remove()
移除列表中某個指定的元素,沒有返回值拇泛,并且假如有多個相同值的元素存在镊靴,每次只會移除排在最前面的那個元素
>>> li = [123, 123, 456, '123']
>>> li.remove(123)
>>> li
[123, 456, '123']
>>> li.remove('123')
>>> li
[123, 456]
-
pop()
從原列表中刪除一個元素以躯,并且把這個元素返回。接收零個或一個參數(shù),參數(shù)是偏移量资铡,int 類型。
>>> li = [123, 456, 789, '123']
# 刪除列表的最后一個元素
>>> li1 = li.pop()
>>> li1
'123'
>>> li
[123, 456, 789]
# 刪除列表的倒數(shù)第二個元素
>>> li2 = li.pop(-2)
>>> li2
456
>>> li
[123, 789]
- 循環(huán)列表
>>> li = [123, 456, 789, '123']
>>> for i in li:
... print(i)
...
123
456
789
123
三励幼、元組
1 元組特性介紹
- 元組和列表一樣灌曙,也是一種序列。
- 唯一的不同是裕照,元組是相對不可變的
2 高效創(chuàng)建元組
t1 = ()
創(chuàng)建 空 元素的元組 t1
創(chuàng)建非空元素的元組是用逗號攒发,而不是用小括號
>>> t1 = (3)
>>> t2 = 3,
>>> type(t1)
<class 'int'>
>>> type(t2)
<class 'tuple'>
tuple()
可以對其他序列類型的數(shù)據(jù)轉(zhuǎn)換為元組。
>>> c = 'chen'
>>> n = [1, 2, 3]
>>> tuple(c)
('c', 'h', 'e', 'n')
>>> tuple(n)
(1, 2, 3)
>>> t1 = [1, 2, 3, ['a', 'b']]
>>> tuple(t1)
(1, 2, 3, ['a', 'b'])
更改元組數(shù)值
>>> t1 = (1, 2, 3, ['a', 'b'])
>>> t1[3][0]=0
>>> t1
(1, 2, 3, [0, 'b'])
3. 循環(huán)元組
>>> t = ('chen', 123, 456)
>>> for i in t:
... print(i)
...
chen
123
456
4. 使用元組的理由
- 占用內(nèi)存空間小
- 元組內(nèi)的值不會被意外的修改
- 可作為字典的鍵
- 函數(shù)的參數(shù)是以元組形式傳遞的
- 命名元組有時候可以代替類的對象(面向?qū)ο蟮臅r候講)