程序 = 算法 + 數(shù)據(jù)結(jié)構(gòu)
—— Nicklaus Wirth
目錄
從這句話程序 = 算法 + 數(shù)據(jù)結(jié)構(gòu)
可以看出數(shù)據(jù)結(jié)構(gòu)
對(duì)于編程的重要性夷陋。數(shù)據(jù)結(jié)構(gòu)就是數(shù)據(jù)的組織/存儲(chǔ)
方式悄但。
從本節(jié)開始我們將介紹Python 中的數(shù)據(jù)結(jié)構(gòu):
- 列表
list
- 元組
tuple
- 字典
dict
- 集合
set
這些數(shù)據(jù)結(jié)構(gòu)在Python3.x
中都是一個(gè)類class
:
>>> list
<class 'list'>
>>> tuple
<class 'tuple'>
>>> dict
<class 'dict'>
>>> set
<class 'set'>
提示:
這幾個(gè)類名list
梭域,tuple
,dict
赐纱,set
并不是Python 中的保留字脊奋,你可以使用它們作為變量名熬北,但一般并不建議這樣做。
可使用keyword
模塊來查看Python 中的保留字诚隙。
Python 中數(shù)據(jù)結(jié)構(gòu)非常易用讶隐,且語法簡(jiǎn)單。我們將介紹這些數(shù)據(jù)結(jié)構(gòu)的使用方法久又。
本節(jié)我們介紹Python 中的列表 list
巫延。
1,Python 列表
大部分編程語言中都有數(shù)組
的概念地消,數(shù)組中元素的類型必須相同炉峰。
Python 中沒有數(shù)組的概念,Python 列表可看作是一種增強(qiáng)版的數(shù)組脉执。
Python 列表有如下特點(diǎn):
- 列表中的元素可以是
任意類型
的數(shù)據(jù) - 可使用
下標(biāo)
和切片
訪問列表內(nèi)容 - 可在列表的任意位置
插入
和刪除
元素 - 使用列表時(shí)疼阔,無須關(guān)注列表的
容量
問題,Python 會(huì)在需要的時(shí)候自動(dòng)擴(kuò)容
和縮容
2半夷,聲明列表
Python 中的列表使用中括號(hào)[]
表示:
>>> l = [] # 一個(gè)空列表
>>> l = ['a', 'bc', 1, 2.5, True] # 列表元素可以是任意類型
>>> type(l)
<class 'list'>
3竿开,列表元素個(gè)數(shù)
使用len()
函數(shù)可查看列表中的元素個(gè)數(shù):
>>> l = ['a', 'bc', 1, 2.5, True]
>>> len(l)
5
4,訪問列表元素
可以像訪問字符串
一樣玻熙,使用下標(biāo)
來訪問列表元素:
>>> l = ['a', 'bc', 1, 2.5, True]
>>> l[0] # 訪問第 1 個(gè)元素
'a'
>>> l[4] # 訪問第 5 個(gè)元素
True
>>> l[5] # 超出范圍否彩,拋出異常
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range
>>> l[-1] # 訪問倒數(shù)第 1 個(gè)元素
True
>>> l[-5] # 訪問倒數(shù)第 5 個(gè)元素
'a'
>>> l[-6] # 超出范圍,拋出異常
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range
5嗦随,列表部分元素
同樣可以向截取字符串
一樣來截取部分列表元素:
>>> l = ['a', 'bc', 1, 2.5, True]
>>> l[1:3]
['bc', 1]
>>> l[1:]
['bc', 1, 2.5, True]
>>> l[:4]
['a', 'bc', 1, 2.5]
>>> l[:]
['a', 'bc', 1, 2.5, True]
6列荔,遍歷列表
可使用 for
循環(huán)來遍歷列表:
l = ['a', 'bc', 1, 2.5, True]
for item in l:
print(item)
以上代碼的輸出如下:
a
bc
1
2.5
True
7,修改和刪除元素
修改列表元素
我們可以使用下標(biāo)
和賦值語句
來修改列表元素:
>>> l = ['a', 'bc', 1, 2.5, True]
>>> l[0] = 'x' # 第 1 個(gè)元素改為 ‘x’
>>> l[3] = 5 # 第 4 個(gè)元素改為 5
>>> l # 修改后的列表
['x', 'bc', 1, 5, True]
刪除列表元素
可以使用下標(biāo)
和del
關(guān)鍵字來刪除列表元素:
>>> l = ['a', 'bc', 1, 2.5, True]
>>> del l[1] # 刪除第 2 個(gè)元素
>>> del l[3] # 刪除第 4 個(gè)元素
>>> l # 刪除元素后的列表
['a', 1, 2.5]
8枚尼,列表運(yùn)算
Python 列表可以進(jìn)行加運(yùn)算
贴浙,乘運(yùn)算
,in 運(yùn)算
署恍。
列表加運(yùn)算
一個(gè)列表和另一個(gè)列表可以相加崎溃,得到一個(gè)新的列表:
>>> l1 = ['a', 'b', 'c']
>>> l2 = [1, 2, 3]
>>> l3 = l1 + l2
>>> l3 # 新的列表
['a', 'b', 'c', 1, 2, 3]
列表乘運(yùn)算
一個(gè)列表可以乘以一個(gè)整數(shù)n
:
- 當(dāng)
n <= 0
時(shí),得到一個(gè)空列表[]
- 當(dāng)
n > 0
時(shí)盯质,相當(dāng)于n
個(gè)列表相加
示例:
>>> ['a', 'b'] * -1
[]
>>> ['a', 'b'] * 0
[]
>>> ['a', 'b'] * 2
['a', 'b', 'a', 'b']
列表in 運(yùn)算
可以通過 in
運(yùn)算來查看一個(gè)元素是否存在于列表中袁串,返回一個(gè) bool
類型:
>>> 'a' in ['a', 'b']
True
>>> 'a' not in ['a', 'b']
False
9,列表函數(shù)
Python 中的list
是一個(gè) class
呼巷,可通過type(列表對(duì)象)
來查看:
>>> type([]) # 空列表
<class 'list'>
可通過dir(list)
或 dir(列表對(duì)象)
來查看Python list
支持的方法:
>>> dir(list)
['__add__', '__class__', '__contains__',
'__delattr__', '__delitem__', '__dir__',
'__doc__', '__eq__', '__format__',
'__ge__', '__getattribute__',
'__getitem__', '__gt__', '__hash__',
'__iadd__', '__imul__', '__init__',
'__init_subclass__', '__iter__',
'__le__', '__len__', '__lt__', '__mul__',
'__ne__', '__new__', '__reduce__',
'__reduce_ex__', '__repr__', '__reversed__',
'__rmul__', '__setattr__', '__setitem__',
'__sizeof__', '__str__', '__subclasshook__',
'append', 'clear', 'copy', 'count',
'extend', 'index', 'insert',
'pop', 'remove', 'reverse', 'sort']
這里我們依然只關(guān)注非魔法方法
囱修,共11 個(gè)。
1.append
方法
作用:在列表
L
的尾部追加元素
原型:L.append(object) -> None
參數(shù):要追加的元素王悍,可以是任意類型
返回值:總是返回None
示例:
>>> l = [1] # 初始化一個(gè)列表
>>> l.append(2) # 在尾部追加 2
>>> l
[1, 2]
>>> l.append(3) # 在尾部追加 3
>>> l
[1, 2, 3]
2.insert
方法
作用:在列表
L
的index
下標(biāo)之前插入元素object
原型:L.insert(index, object)
參數(shù) index:插入元素的位置
參數(shù) object:要插入的元素
返回值:無返回值
示例:
>>> l = ['a', 'b', 'c'] # 初始化一個(gè)列表
>>> l.insert(1, 'xx') # 在列表的下標(biāo) 1 處插入 'xx'
>>> l
['a', 'xx', 'b', 'c'] # 插入后破镰,'xx' 下標(biāo)為 1
>>> l.insert(3, 'yy') # 在列表的下標(biāo) 3 處插入 'yy'
>>> l
['a', 'xx', 'b', 'yy', 'c'] # 插入后,'yy' 的下標(biāo)為 3
3.remove
方法
作用:從表頭開始,刪除列表
L
中第一個(gè)
值為value
的元素鲜漩,如果值為value
的元素不存在源譬,則拋出ValueError
異常
原型:L.remove(value) -> None
參數(shù):要?jiǎng)h除的元素的值
返回值:總是返回None
示例:
>>> l = ['a', 'b', 'b', 'c']
>>> l.remove('b') # 刪除第一個(gè)值為 'b' 的元素
>>> l
['a', 'b', 'c']
>>> l.remove('c') # 刪除第一個(gè)值為 'c' 的元素
>>> l
['a', 'b']
>>> l.remove('c') # 已經(jīng)不存在值為 'c' 的元素,拋出 ValueError 異常
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: list.remove(x): x not in list
4.pop
方法
作用:移除并返回下標(biāo)為
index
的元素孕似,下標(biāo)不存在時(shí)瓶佳,拋出IndexError
異常
原型:L.pop([index]) -> item
參數(shù):要移除的元素的下標(biāo),可省鳞青,默認(rèn)為最后一個(gè)
返回值:移除的元素
示例:
>>> l = ['a', 'b', 'c']
>>> item = l.pop() # 移除最后一個(gè)元素
>>> item
'c'
>>> l
['a', 'b']
>>> l.pop(3) # 不存在下標(biāo)為 3 的元素霸饲,拋出異常
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: pop index out of range
5.clear
方法
作用:清空列表
L
原型:L.clear() -> None
參數(shù):無
返回值:總是返回None
示例:
>>> l = ['a', 'b', 'c']
>>> l.clear()
>>> l # 列表被清空
[]
6.count
方法
作用:計(jì)算列表
L
中值為value
的個(gè)數(shù)
原型:L.count(value) -> integer
參數(shù):要計(jì)算的元素的值
返回值:個(gè)數(shù)
示例:
>>> l = ['a', 'b', 'c', 'a']
>>> l.count('a')
2
>>> l.count('b')
1
>>> l.count('d')
0
7.copy
方法
作用:淺拷貝列表
L
,相當(dāng)于L[:]
原型:L.copy() -> list
參數(shù):無
返回值:一個(gè)列表
示例:
>>> l = ['a', 'b', 'c']
>>> l2 = l.copy()
>>> l2
['a', 'b', 'c']
8.extend
方法
作用:在列表
L
尾部追加一個(gè)序列iterable
原型:L.extend(iterable) -> None
參數(shù):iterable
可以是任意一種序列
類型
返回值:總是返回None
示例:
>>> l1 = ['a', 'b', 'c']
>>> l2 = ['1', '2', '3']
>>> l1.extend(l2)
>>> l1
['a', 'b', 'c', '1', '2', '3']
9.reverse
方法
作用:將列表
L
翻轉(zhuǎn)
原型:L.reverse()
參數(shù):無
返回值:無返回值
示例:
>>> l = ['a', 'b', 'c']
>>> l.reverse()
>>> l
['c', 'b', 'a']
10.sort
方法
作用:對(duì)列表
L
進(jìn)行排序
原型:L.sort(key=None, reverse=False) -> None
參數(shù) key:
key
是一個(gè)函數(shù)類型的參數(shù)臂拓,該函數(shù)接收一個(gè)參數(shù)item1
厚脉,并返回一個(gè)值item2
。
sort
方法根據(jù)item2
進(jìn)行排序胶惰,item1
是L
中的每個(gè)元素 傻工。
key
可省,默認(rèn)為None
孵滞,表示直接使用L
中的元素進(jìn)行排序中捆。參數(shù) reverse:
reverse
為True
表示按照降序排序。
reverse
為False
表示按照升序排序坊饶。
reverse
可省泄伪,默認(rèn)為False
。返回值:總是返回
None
示例匿级,key
為 None
:
>>> l = ['b', 'a', 'd', 'c'] # 一個(gè)亂序的列表
>>> l.sort() # 升序排序
>>> l
['a', 'b', 'c', 'd']
>>> l.sort(reverse=True) # 降序排序
>>> l
['d', 'c', 'b', 'a']
示例蟋滴,key
不為 None
:
>>> l = [('c', 1), ('b', 2), ('a', 3)] # 列表中的元素是元組類型
>>> def key(item): return item[0] # 該函數(shù)返回元組的第一個(gè)元素
>>> l.sort(key=key) # 以元組的第一個(gè)元素進(jìn)行排序
>>> l
[('a', 3), ('b', 2), ('c', 1)]
>>>
>>> l = [('c', 1), ('b', 2), ('a', 3)]
>>> def key(item): return item[1] # 該函數(shù)返回元組的第二個(gè)元素
>>> l.sort(key=key) # 以元組的第二個(gè)元素進(jìn)行排序
>>> l
[('c', 1), ('b', 2), ('a', 3)]
提示:
一個(gè)
函數(shù)
也可以作為參數(shù)
傳遞給另一個(gè)函數(shù)
,后續(xù)講到函數(shù)的概念時(shí)痘绎,會(huì)詳細(xì)講解津函。
11.index
方法
作用:從列表
L[start:stip]
的表頭
查找第一個(gè)
值為value
的元素
原型:L.index(value, [start, [stop]]) -> integer
參數(shù) value:查找值為value
的元素
參數(shù) start:列表L
的起始下標(biāo)
參數(shù) stop:列表L
的終止下標(biāo)
返回值:若能找到,則返回該元素的下標(biāo)
孤页,否則尔苦,拋出ValueError
異常
示例:
>>> l = ['a', 'b', 'c']
>>> l.index('b') # 找到了,返回下標(biāo)
1
>>> l.index('d') # 沒找到行施,拋出 ValueError 異常
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: 'd' is not in list
(完允坚。)
推薦閱讀:
Python 簡(jiǎn)明教程 --- 5,Python 表達(dá)式與運(yùn)算符
Python 簡(jiǎn)明教程 --- 6悲龟,Python 控制流
Python 簡(jiǎn)明教程 --- 7屋讶,Python 字符串
Python 簡(jiǎn)明教程 --- 8冰寻,Python 字符串函數(shù)
Python 簡(jiǎn)明教程 --- 9须教,Python 編碼