一文搞懂Python中列表List和元組Tuple的使用
列表 List
列表是任意對(duì)象的集合,在 Python 中通過逗號(hào)分隔的對(duì)象序列括在方括號(hào) ( [] ) 中
people_list = ['曹操', '曹丕', '甄姫', '蔡文姫'] print(people_list) ['曹操', '曹丕', '甄姫', '蔡文姫'] people_list ['曹操', '曹丕', '甄姫', '蔡文姫']
列表是有序的
列表是對(duì)象的有序集合。定義列表時(shí)指定元素的順序是該列表的固有特征,并在該列表的生命周期內(nèi)保持不變
# 具有不同順序的相同元素的列表是不相同的。 list_ = ['曹操', '曹丕', '甄姫', '蔡文姫'] list_b = ['甄姫', '蔡文姫', '曹丕', '曹操'] list_ == list_b False list_ is list_b False
列表可以包含任意對(duì)象
列表的元素都可以是同一類型
list_ = ['曹操', '曹丕', '甄姫', '甄姫'] list_ ['曹操', '曹丕', '甄姫', '甄姫']
元素可以是不同的類型
list_ = [21.42, '曹操', 3, 4, '曹丕', False, 3.14159] list_ [21.42, '曹操', 3, 4, '曹丕', False, 3.14159]
列表甚至可以包含復(fù)雜的對(duì)象(函數(shù)、類和模塊)
int <class 'int'> len <built-in function len> def Dynasty_Warriors(): pass Dynasty_Warriors <function Dynasty_Warriors at 0x000002A96EAB1840> import math math <module 'math' (built-in)> list_ = [int, len, Dynasty_Warriors, math] list_ [<class 'int'>, <built-in function len>, <function Dynasty_Warriors at 0x000002A96EAB1840>,<module 'math' (built-in)>]
列表對(duì)象不必是唯一的。給定對(duì)象可以多次出現(xiàn)在列表中
list_ = ['曹丕', '甄姫', '甄姫', '曹丕', '甄姫', '曹丕'] list_ ['曹丕', '甄姫', '甄姫', '曹丕', '甄姫', '曹丕']
通過索引訪問列表元素
像字符串一樣列表索引可以使用方括號(hào)中的索引訪問列表中的各個(gè)元素
list_ = ['曹操', '曹丕', '甄姫', '蔡文姫'] list_[0],list_[2] ('曹操', '甄姫') list_[-1],list_[-2] ('蔡文姫', '甄姫')
切片表達(dá)式 [m:n] 返回索引 m 到 n 包括索引 n 的元素。
list_ = ['曹操', '曹丕', '甄姫', '蔡文姫'] list_[2:4] ['甄姫', '蔡文姫']
字符串切片的其他特性也適用于列表切片
正索引和負(fù)索引
list_[-5:-2] ['曹操', '曹丕'] list_[0:2] ['曹操', '曹丕'] list_[-5:-2] == list_[0:2] True
省略索引開頭和結(jié)束索引
print(list_[:2], list_[0:2]) ['曹操', '曹丕']['曹操', '曹丕'] print(list_[2:], list_[2:len(a)]) ['甄姫', '蔡文姫']['甄姫', '蔡文姫'] list_[:4] + list_[4:] ['曹操', '曹丕', '甄姫', '蔡文姫'] list_[:4] + list_[4:] == list_ True
指定步幅的正負(fù)索引
list_[0:4:2] ['曹操', '甄姫'] list_[1:4:2] ['曹丕', '蔡文姫'] list_[4:0:-2] ['蔡文姫', '曹丕']
反轉(zhuǎn)列表
list_[::-1] ['蔡文姫', '甄姫', '曹丕', '曹操']
運(yùn)算符和內(nèi)置函數(shù)處理列表
運(yùn)算符 in 和 not in
list_ ['曹操', '曹丕', '甄姫', '蔡文姫'] '蔡文姫' in list_ True '曹仁' not in list_ True
連接( + )和復(fù)制( * )運(yùn)算符
list_ = ['曹操', '曹丕'] list_ + ['甄姫', '蔡文姫'] ['曹操', '曹丕', '甄姫', '蔡文姫'] list_ * 2 ['曹操', '曹丕', '甄姫', '蔡文姫' '曹操', '曹丕', '甄姫','蔡文姫']
函數(shù) len()、min()、max()
list_ = ['曹操', '曹丕', '甄姫', '蔡文姫'] len(a) 4 min(list_ ) '曹丕' max(list_ ) '蔡文姫'
列表嵌套
列表中的元素可以是任何類型的對(duì)象,一個(gè)列表可以包含子列表,而子列表又可以包含子列表本身,依此類推。
常規(guī)嵌套列表操作
list_ = ['a', ['bb', ['ccc', 'ddd'], 'ee', 'ff'], 'g', ['hh', 'ii'], 'j'] ['a', ['bb', ['ccc', 'ddd'], 'ee', 'ff'], 'g', ['hh', 'ii'], 'j'] # list_[0], list_[2], 和list_[4]是字符串 print(list_[0], list_[2], list_[4]) a g j # list_[1]和list_[3]是子列表 list_[1] ['bb', ['ccc', 'ddd'], 'ee', 'ff'] list_[3] ['hh', 'ii'] # 訪問子列表中的元素需附加索引 list_[1] ['bb', ['ccc', 'ddd'], 'ee', 'ff'] list_[1][0] 'bb' list_[1][1] ['ccc', 'ddd'] list_[1][2] 'ee' list_[1][3] 'ff' list_[3] ['hh', 'ii'] print(list_[3][0], list_[3][1]) hh ii # list_[1][1]是另一個(gè)子列表,訪問需要添加索引 list_[1][1] ['ccc', 'ddd'] print(list_[1][1][0], list_[1][1][1]) ccc ddd # 索引和切片的常用語法也適用于子列表。 list_[1][1][-1] 'ddd' list_[1][1:3] [['ccc', 'ddd'], 'ee'] list_[3][::-1] ['ii', 'hh'] # in 操作符使用。 'ddd' in x False 'ddd' in x[1] False 'ddd' in x[1][1] True
列表可變
創(chuàng)建列表后,可以隨意添加、刪除、移動(dòng)和移動(dòng)元素。
修改單個(gè)列表值
列表中的值可以通過索引和簡(jiǎn)單賦值進(jìn)行替換。
s = '曹操,曹丕,甄姫' s[2] = '蔡文姫' Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'str' object does not support item assignment
使用 del 命令刪除列表項(xiàng)
list_ = ['曹操', '曹丕', '甄姫', '蔡文姫'] del list_[3] list_ ['曹操', '曹丕', '甄姫']
修改多個(gè)列表值
切片實(shí)現(xiàn) a[m:n] = <iterable> 序列迭代替換值
list_ = ['曹操', '曹丕', '甄姫', '蔡文姫'] list_[1:4] ['曹丕', '甄姫', '蔡文姫'] list_[1:4] = [1.1, 2.2, 3.3, 4.4, 5.5] list_ ['曹操', 1.1, 2.2, 3.3, 4.4, 5.5]
多個(gè)元素來代替單個(gè)元素
list_ = [1, 2, 3] list_[1:2] = [2.1, 2.2, 2.3] list_ [1, 2.1, 2.2, 2.3, 3] list_ = [1, 2, 3] list_[1] = [2.1, 2.2, 2.3] list_ [1, [2.1, 2.2, 2.3], 3] list_ = [1, 2, 7, 8] list_[2:2] = [3, 4, 5, 6] list_ [1, 2, 3, 4, 5, 6, 7, 8]
切片分配空列表刪除列表中間的多個(gè)元素
list_ = ['曹操', '曹丕', '甄姫', '蔡文姫'] list_[1:4] = [] list_ ['曹操']
列表附加元素或元素附加到列表
list_ = ['曹操', '曹丕'] list_ += [ '甄姫', '蔡文姫'] list_ ['曹操', '曹丕', '甄姫', '蔡文姫'] list_ = [10, 20] + list_ list_ [10, 20, '曹操', '曹丕', '甄姫', '蔡文姫']
列表拼接元素的方法不能直接添加
list_ = ['曹操', '曹丕', '甄姫', '蔡文姫'] list_ += 20 Traceback (most recent call last): File "<pyshell#58>", line 1, in <module> list_ += 20 TypeError: 'int' object is not iterable list_ += [20] list_ ['曹操', '曹丕', '甄姫', '蔡文姫', 20]
append(<obj>) 將對(duì)象附加到列表中
list_ = ['曹操', '曹丕'] list_.append(123) list_ ['曹操', '曹丕', 123] x = list_.append(123) print(x) None
list.extend(<iterable>),追加元素
list_ = ['曹操', '曹丕'] list_.extend([1, 2, 3]) list_ ['曹操', '曹丕', 1, 2, 3]
list.insert(<index>, <obj>),插入元素
將對(duì)象插入列表
list_ = ['曹操', '曹丕', '甄姫', '蔡文姫'] list_.insert(3, 3.14159) list_[3] 3.14159 list_ ['曹操', '曹丕', '甄姫', 3.14159, '蔡文姫']
list.remove(<obj>),按照元素刪除元素
list_ = ['曹操', '曹丕', '甄姫', '蔡文姫'] list_.remove('甄姫') list_ ['曹操', '曹丕', '蔡文姫'] # 如果<obj>不在中列表,則會(huì)引發(fā)異常。 list_.remove('曹丕k') Traceback (most recent call last): File "<pyshell#13>", line 1, in <module> list_.remove('曹丕k') ValueError: list.remove(x): x not in list
list.pop(index=-1),按索引刪除元素
從列表中刪除一個(gè)元素,需要指定索引并返回被移除的項(xiàng)目的值,pop(-1) 等價(jià)于 pop()
list_ = ['曹操', '曹丕', '甄姫', '蔡文姫'] list_.pop() '蔡文姫' list_ ['曹操', '曹丕', '甄姫'] list_.pop() '甄姫' list_ ['曹操', '曹丕']
列表是動(dòng)態(tài)的,隨著項(xiàng)目數(shù)據(jù)的變化而變化
list_ = ['曹操', '曹丕', '甄姫', '蔡文姫'] # 數(shù)據(jù)增加 list_ [2:2] = [1, 2, 3] list_ += [3.14159] list_ ['曹操', '曹丕', 1, 2, 3, '甄姫', '蔡文姫', 3.14159] # 數(shù)據(jù)刪除 a = ['曹操', '曹丕', '甄姫', '蔡文姫'] a[2:3] = [] del a[0] a ['曹丕', '蔡文姫']
元組 Tuple
對(duì)象的有序集合,稱為元組。與列表的區(qū)別在于元組是通過括號(hào) ( () ) 而不是方括號(hào) ( [] ) 中來定義的,以及元素不可變。
定義和使用元組
t = ('曹操', '曹丕', '甄姫', '蔡文姫') t ('曹操', '曹丕', '甄姫', '蔡文姫') t[0] '曹操' t[-1] '蔡文姫' t[1::2] ('曹丕', '蔡文姫') # 可以進(jìn)行倒序排列 t[::-1] ('蔡文姫', '甄姫', '曹丕', '曹操') # 元組不可修改 t = ('曹操', '曹丕', '甄姫', '蔡文姫') t[2] = '曹丕k' Traceback (most recent call last): File "<pyshell#65>", line 1, in <module> t[2] = '曹丕k' TypeError: 'tuple' object does not support item assignment
元素對(duì)比列表的優(yōu)點(diǎn)
- 處理速度更快
- 防止被意外修改
- 字典需要不可變更類型的值作為組件
# 元素用,分割 a = '曹操' b = 42 a, 3.14159, b ('曹操', 3.14159, 42) # 定義一個(gè)空的元組 t = () type(t) <class 'tuple'> # 定義項(xiàng)目的元組 t = (2,) type(t) <class 'tuple'> t[0] 2 t[-1] 2 # 元組單一元素會(huì)包含符號(hào) print(t) (2,)
元組分配、打包和解包
可以將包含多個(gè)項(xiàng)目的文字元組分配給單個(gè)對(duì)象。
t ('曹操', '曹丕', '甄姫', '蔡文姫') t[0] '曹操' t[-1] '蔡文姫'
被打包的對(duì)象直接被分配新的元組中,并解釋到各個(gè)元組對(duì)象。
(s1, s2, s3, s4) = t s1 '曹操' s2 '曹丕' s3 '甄姫' s4 '蔡文姫'
解包時(shí),左邊的變量個(gè)數(shù)必須與元組中的值個(gè)數(shù)相匹配
(s1, s2, s3) = t Traceback (most recent call last): File "<pyshell#16>", line 1, in <module> (s1, s2, s3) = t ValueError: too many values to unpack (expected 3) (s1, s2, s3, s4, s5) = t Traceback (most recent call last): File "<pyshell#17>", line 1, in <module> (s1, s2, s3, s4, s5) = t ValueError: not enough values to unpack (expected 5, got 4)
打包、解包一步操作
(s1, s2, s3, s4) = ('曹操', '曹丕', '甄姫', '蔡文姫') s1, s2, s3, s4 = '曹操', '曹丕', '甄姫', '蔡文姫' s1 '曹操' s2 '曹丕' s3 '甄姫' s4 '蔡文姫'
元組互換進(jìn)行互換賦值
a = '曹操' b = '曹丕' a, b ('曹操', '曹丕') a, b = b, a a, b ('曹丕', '曹操')
List 與 Tuple 的區(qū)別
功能說明 | 列表 | 元組 |
---|---|---|
元素操作 | 可變 | 不可變 |
迭代耗時(shí) | 耗時(shí)多 | 相對(duì)較快 |
操作修改 | 執(zhí)行插入、刪除、追加操作 | 僅限訪問元素 |
內(nèi)存消耗 | 消耗內(nèi)存多 | 消耗內(nèi)存少 |
內(nèi)置方法 | 內(nèi)置方法多 | 內(nèi)置方法少 |
容錯(cuò)概率 | 易發(fā)生變化和錯(cuò)誤 | 難發(fā)生 |
到此這篇關(guān)于一文搞懂Python中列表List和元組Tuple的使用的文章就介紹到這了,更多相關(guān)Python列表 元組內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python實(shí)現(xiàn)植物大戰(zhàn)僵尸游戲?qū)嵗a
這篇文章主要給大家介紹了關(guān)于python實(shí)現(xiàn)植物大戰(zhàn)僵尸游戲的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06使用rpclib進(jìn)行Python網(wǎng)絡(luò)編程時(shí)的注釋問題
這篇文章主要介紹了使用rpclib進(jìn)行Python網(wǎng)絡(luò)編程時(shí)的注釋問題,作者講到了自己在編寫服務(wù)器時(shí)要用unicode注釋等需要注意的地方,需要的朋友可以參考下2015-05-05Python中使用format函數(shù)的小結(jié)
在Python中,format()函數(shù)是一種用于格式化字符串的方法主要介紹了Python中使用format函數(shù)的小結(jié),本文就來介紹一下format()函數(shù)的使用示例,感興趣的可以了解一下2023-08-08基于Python實(shí)現(xiàn)對(duì)Excel工作表中的數(shù)據(jù)進(jìn)行排序
在Excel中,排序是整理數(shù)據(jù)的一種重要方式,它可以讓你更好地理解數(shù)據(jù),本文將介紹如何使用第三方庫Spire.XLS?for?Python通過Python來對(duì)Excel中的數(shù)據(jù)進(jìn)行排序,需要的可以參考下2024-03-03Python解決多進(jìn)程間訪問效率低的方法總結(jié)
這篇文章主要為大家詳細(xì)介紹了當(dāng)Python多進(jìn)程間訪問效率低時(shí),應(yīng)該如何解決?文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2022-09-09