g列表的操作
列表相加操作
格式:變量 = 列表1 + 列表2
結(jié)果:集合兩個列表所有元素的新列表
注意:+兩側(cè)都要是列表類型
# L = [1,2,3]
# L1 = [4,5,6]
# print(L+L1)
列表相乘操作
格式:變量 = 列表 * 整數(shù)
結(jié)果:原列表內(nèi)所用元素復(fù)制N遍的新列表
# L = [1,2,3]
# print(L*2)
索引操作
變量[索引]
分片操作
- 格式:變量 = 列表[:]
獲取整個列表 - 格式:變量 = 列表[:結(jié)束索引]
獲取列表開頭到結(jié)束索引之前的數(shù)據(jù)組成的列表 - 格式:變量 = 列表[開始索引:]
獲取列表開始索引到列表末尾的數(shù)據(jù)組成的列表 - 格式:變量 = 列表[開始索引:結(jié)束索引]
- 獲取開始索引和結(jié)束索引之間的數(shù)據(jù)組成的列表(包含開始索引,不包含結(jié)束索引)
- 格式:變量 = 列表[開始索引:結(jié)束索引:間隔值]
- 獲取開始索引和結(jié)束索引之間的數(shù)據(jù)(按照間隔值來獲热姥痢)組成的列表(包含開始索引,不包含結(jié)束索引)
# L = [1,2,3,4,5,6,7,8,9]
# L1 = L[6:3:-1]
# print(L1)
成員檢測
檢測一個數(shù)據(jù)是否在列表中
格式:值 in 列表
結(jié)果:布爾值檢測一個數(shù)據(jù)是否不在列表中
格式:值 not in 列表
結(jié)果:布爾值
列表的遍歷操作
for...in
- 格式:
for 變量 in 列表:
使用變量
# L = [1,2,3,4,5]
# for val in L:
# print(val)
while
- 格式
i = 0
while i<len(列表):
使用列表中的元素(列表[i])
i += 1
# L = [1,2,3,4,5,6,7]
# i = 0
# while i<len(L):
# print(L[i])
# i += 1
遍歷同等長度的二級列表
列表 = [[值1,值2],[值1,值2],....]
for 變量1,變量2 in 列表:
使用變量1和變量2
注意:變量1取二級列表中的第一個值炕横,變量2取第二個值
# L = [[1,2],[3,4],[5,6]]
# for val,var in L:
# print(val,var)
遍歷非同等長度的二級列表
列表 = [[值1卿嘲,值2]梅肤,[值1授帕,值2,值3],[值]...]
for 變量1 in 列表:
for 變量2 in 變量1:
使用變量2(變量2是二級列表中的每個值)
# L = [[1,2],[3,4],[5,6,7]]
# for val in L:
# print(val,type(val))
# for var in val:
# print(var,type(var))
列表的十一種操作方法
copy() 復(fù)制列表
- 涉及深淺拷貝憋飞,此為淺拷貝
clear()
- 清空列表
append()
功能:向列表的末尾添加新的元素
格式:列表.append(值)
返回值:None
注意:新添加的值在列表的末尾,該函數(shù)直接操作原有列表
# L.append(8)
# L.append(7)
# print(L)
insert()
功能:在指定位置之前插入元素
格式:列表.insert(索引,值)
返回值:None
注意:直接改變原有列表
# L.insert(0,1)
# print(L)
extend()
功能:前一個列表繼承另一個序列避凝,即直接將另一個序列中的元素添加到這個列表中撑螺,如果這個序列是字符串,字符串中每個字符作為一個元素添加到列表中
格式:列表.extend(序列)
返回值:None
注意:直接改變原有列表
# L.append(L1)
# print(L)
# L.extend(L1)
# print(L)
pop()
功能:在列表中移除一個元素
格式:列表.pop(索引)
返回值:無
注意:沒有指定索引,默認(rèn)移除最后一個元素
# L.pop()
# L.pop(0) #可以傳遞索引值 來刪除指定的元素
# print(L)
remove()
功能:移除指定的值唇敞,但只能移除列表中該值第一次出現(xiàn)的元素
格式:列表.remove(值)
返回值:無
注意:如果有索引的情況下推薦使用POP移除歇拆,效率比remove高
# L.remove([7,8,9])
# L.remove(8) #如果有多個相同的元素 默認(rèn)刪除第一個
# print(L)
index()
功能:獲取某個元素在列表中的索引,只能獲取第一個出現(xiàn)的該元素的索引逻卖,擁有3個參數(shù)
格式:index(元素坤邪,開始索引,結(jié)束索引)
返回值:整數(shù)
注意:值不存在與列表或指定區(qū)間內(nèi)時(shí)拋出異常錯誤!
# print(L.index(8))
# print(L.index(7,5))
# L = [2,1,5,4,2,4,6,4,2,1,5]
# print(L.pop(L.index(5,L.index(5)+1)))
# print(L)
count()
功能:計(jì)算某個元素出現(xiàn)的次數(shù)
格式:列表.count(值)
返回值:整數(shù)
# L = [2,1,5,4,2,4,6,4,2,1,5]
# print(L.count(2))
# print(L.count(5))
# print(L.count(6))
sort()
功能:列表排序
- 格式:列表.sort() 按照從小到大排序(數(shù)字)
- 格式:列表.sort(reverse=True) 按照從大到小排序(數(shù)字)
- 格式:列表.sort(key=函數(shù)) 對值進(jìn)行指定的函數(shù)處理之后在從小到大排序
- 格式:列表.sort(key=函數(shù),reverse=True) 對值進(jìn)行指定的函數(shù)處理之后在從大到小排序
返回值:None
注意:直接改變原有列表
# L = [2,1,4,3,7,6]
# L.sort()
# print(L)
# L = [2,1,4,3,7,6]
# L1 = L.sort()
# L1 = sorted(L)
# print(L)
# print(L1)
L = [
{"name":"jack","age":18},
{"name":"rose","age":22},
{"name":"tom","age":102},
{"name":"jerry","age":19}
]
L.sort(key=lambda x:x["name"])
print(L)
reverse()
功能:列表反轉(zhuǎn)操作
格式:列表.reverse()
返回值:None
# L = [2,1,4,3,7,6]
# L.reverse()
# print(L)
列表推導(dǎo)式
列表的推導(dǎo)公式默認(rèn)是層層嵌套的關(guān)系
格式:
例1:已知L = [1,2,3,4,5,6,7,8,9]
,求變量L內(nèi)所有元素的平方組成的列表
for循環(huán)寫法:
# L1 = []
# for val in L:
# L1.append(val**2)
# print(L1)
列表推導(dǎo)式
# L1 = [var**2 for var in L]
# print(L1)
例2:求L中所有偶數(shù)的平方
for循環(huán)寫法
# L1 = []
# for val in L:
# if val % 2 == 0:
# L1.append(val**2)
# print(L1)
列表推導(dǎo)式
# L1 = [val**2 for val in L if val%2==0]
# print(L1)
例3:L = ["jack","ada","tom","WE","file","continue","break"]
求列表中所有元素的長度組成的列表
# L1 = [len(i) for i in L]
# print(L1)
例4:已知str="abc" str2="ABC"
求兩個字符串中的元素的所有組合
# L1 = [x+y for x in str1 for y in str2 ]
# print(L1)
例5:求x,y組成的元組 x是1~5之間的偶數(shù) y是1~6之間的奇數(shù)
# L1 = [x for x in range(1,5) if x % 2==0]
# print(tuple(L1))
# L2 = [y for y in range(1,6) if y % 2==1]
# print(tuple(L2))
#
# list1 = [(x,y) for x in range(2,6,2) for y in range(1,7,2)]
# print(list1)
# L = [(x,y) for x in range(1,5) if x%2==0 for y in range(1,7) if y%2==1]
# print(L)
例6:已知 L = [[1,2,3],[4,5,6],[7,8,9]]
求[3,6,9]
組成的列表
# L1 = [i[2] for i in L]
# print(L1)
例7:求上面列表中[1,5,9]
組成的列表
# L1 = [L[i][i] for i in range(len(L))]
# print(L1)
# i = 0,1,2
# 當(dāng)i = 0 L[i] = [1,2,3] L[i][i] = 1
# 當(dāng)i = 1 L[i] = [4,5,6] L[i][i] = 5
# 當(dāng)i = 2 L[i] = [7,8,9] L[i][i] = 9
深淺拷貝
需要用到copy模塊皆看,import copy
賦值操作 賦值后的列表跟隨元列表進(jìn)行改變
- 賦值操作直接把新變量的內(nèi)存地址指向賦值的變量的內(nèi)存地址织阅,所以原變量變化時(shí)皂冰,新變量隨之變化
# L = [2,1,4,3,[5,6]]
# L = [1,2,[3,4,[5,6]]]
# L1 = L
# L.append(5)
# L[2][2].append(7)
# print(L)
# print(L1)
淺拷貝 只拷貝外層列表 內(nèi)層列表跟隨原列表進(jìn)行改變
- 淺拷貝只能拷貝外層內(nèi)容席怪,內(nèi)層內(nèi)容相當(dāng)于做了映射应闯;所以原變量外層變化時(shí),新變量不變化挂捻,原變量內(nèi)層變化時(shí)碉纺,新變量跟著變化
# L1 = copy.copy(L)
# L.append(5)
# L[2][2].append(7)
# print(L)
# print(L1)
深拷貝 深拷貝拷貝整個列表 不跟隨原列表進(jìn)行改變
# L1 = copy.deepcopy(L)
# L.append(5)
# L[2][2].append(7)
# print(L)
# print(L1)
元組的操作
元組的遍歷
for ... in
變量 = (值1,值2,值3...)
for 變量 in 元組:
使用變量獲取元組的每個值
# t = (1,2,3,4)
# for val in t:
# print(val)
while
i = 0
while i<len(元組):
使用元組變量[i]訪問每個值
i += 1
# t = (1,2,3,4)
# i = 0
# while i < len(t):
# print(t[i])
# i += 1
遍歷長度相同的多級元組
元組 = ((值1,值2...),(值1,值2...)...)
for 變量1,變量2.. in 元組:
使用變量1和變量2
# t = ((1,2),(3,4),(5,6))
# for val,var in t:
# print(val,var)
遍歷長度不同的多級元組
元組 = ((值1,值2...),(值1,值2...)...)
for 變量1 in 元組:
for 變量2 in 變量1:
使用變量2獲取每個值
# t = ((1,2),(3,4,5),(6,7))
# for val in t:
# for var in val:
# print(val,var)
元組的操作方法
index()
獲取指定值在元組中的索引值
格式:元組.index(值)
返回值:整數(shù)
print(t.index(2))
count()
計(jì)算某個值在元組中出現(xiàn)的次數(shù)
格式:元組.count(值)
返回值:整數(shù)
print(t.count(2))
元組推導(dǎo)式
- 元組的推導(dǎo)式形式和列表的基本一致刻撒,唯一不一樣的是生成的不是一個新的元組骨田,而是一個生成器,生成器用for循環(huán)遍歷出數(shù)值
基本格式:
格式: 變量 = (i for i in 元組)
結(jié)果:不是元組而是一個生成器
帶條件格式:
格式: 變量 = (i for i in 元組 if 條件表達(dá)式)
結(jié)果:不是元組而是一個生成器
多循環(huán)推導(dǎo)式:
格式: 變量 = (x+y for x in 元組1 for y in 元組2)
結(jié)果:不是元組而是一個生成器 x+y可以是其他操作
帶條件的多循環(huán)推導(dǎo)式:
格式: 變量 = (x+y for x in 元組1 for y in 元組2 if 條件表達(dá)式)
結(jié)果:不是元組而是一個生成器 x+y可以是其他操作