Python 簡(jiǎn)明教程 ---10,Python 列表

程序 = 算法 + 數(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梭域,tupledict赐纱,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 方法

作用:在列表Lindex 下標(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)行排序胶惰,item1L 中的每個(gè)元素 傻工。
key 可省,默認(rèn)為None孵滞,表示直接使用L 中的元素進(jìn)行排序中捆。

參數(shù) reverse

reverseTrue 表示按照降序排序。
reverseFalse 表示按照升序排序坊饶。
reverse 可省泄伪,默認(rèn)為 False

返回值:總是返回 None

示例匿级,keyNone

>>> 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 編碼

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子轻腺,更是在濱河造成了極大的恐慌乐疆,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,843評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件贬养,死亡現(xiàn)場(chǎng)離奇詭異挤土,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)误算,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,538評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門仰美,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人儿礼,你說我怎么就攤上這事咖杂。” “怎么了蚊夫?”我有些...
    開封第一講書人閱讀 163,187評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵诉字,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我知纷,道長(zhǎng)壤圃,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,264評(píng)論 1 292
  • 正文 為了忘掉前任琅轧,我火速辦了婚禮伍绳,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘乍桂。我一直安慰自己墨叛,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,289評(píng)論 6 390
  • 文/花漫 我一把揭開白布模蜡。 她就那樣靜靜地躺著漠趁,像睡著了一般。 火紅的嫁衣襯著肌膚如雪忍疾。 梳的紋絲不亂的頭發(fā)上闯传,一...
    開封第一講書人閱讀 51,231評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音卤妒,去河邊找鬼甥绿。 笑死,一個(gè)胖子當(dāng)著我的面吹牛则披,可吹牛的內(nèi)容都是我干的共缕。 我是一名探鬼主播,決...
    沈念sama閱讀 40,116評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼士复,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼图谷!你這毒婦竟也來了翩活?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,945評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤便贵,失蹤者是張志新(化名)和其女友劉穎菠镇,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體承璃,經(jīng)...
    沈念sama閱讀 45,367評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡利耍,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,581評(píng)論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了盔粹。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片隘梨。...
    茶點(diǎn)故事閱讀 39,754評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖舷嗡,靈堂內(nèi)的尸體忽然破棺而出出嘹,到底是詐尸還是另有隱情,我是刑警寧澤咬崔,帶...
    沈念sama閱讀 35,458評(píng)論 5 344
  • 正文 年R本政府宣布税稼,位于F島的核電站,受9級(jí)特大地震影響垮斯,放射性物質(zhì)發(fā)生泄漏郎仆。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,068評(píng)論 3 327
  • 文/蒙蒙 一兜蠕、第九天 我趴在偏房一處隱蔽的房頂上張望扰肌。 院中可真熱鬧,春花似錦熊杨、人聲如沸曙旭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,692評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽桂躏。三九已至,卻和暖如春川陆,著一層夾襖步出監(jiān)牢的瞬間剂习,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,842評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工较沪, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留鳞绕,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,797評(píng)論 2 369
  • 正文 我出身青樓尸曼,卻偏偏與公主長(zhǎng)得像们何,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子控轿,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,654評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容