Python字符串對象提供了大量方法用于字符串的檢測、替換和排版等操作,另外還有大量內(nèi)置函數(shù)和運算符也支持對字符串的操作,字符串對象是不可變的,所以字符串對象提供的字符串方法都是返回修改后的新字符串
創(chuàng)新互聯(lián)2013年開創(chuàng)至今,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項目成都網(wǎng)站制作、網(wǎng)站設(shè)計網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元興安做網(wǎng)站,已為上家服務(wù),為興安各地企業(yè)和個人服務(wù),聯(lián)系電話:028-86922220
列表是最重要的Python內(nèi)置對象之一,是包含若干元素的有序連續(xù)內(nèi)存空間,當(dāng)列表增加或刪除元素時,列表對象自動進(jìn)行內(nèi)存的擴(kuò)展和收縮,從而保證相鄰元素之間沒有縫隙
append(x) 將x添加到列表尾部
extend(L) 將列表L內(nèi)所有元素追加到列表尾部
insert(x,index) 在列表index的位置插入x,如果index為整數(shù)或者大于列表長度,則將x添加到列表尾部,如果index為負(fù)數(shù)或者小于列表長度的相反數(shù)則在列表頭部插入x
remove(x) 在列表中刪除第一個值為x的元素
pop([index]) 彈出索引為index的值,如果不指定index則刪除最后一個怨怒是
clear() 清空列表,保留列表對象
index(x) 返回x的索引,如果不存在則拋出異常
count(x) 返回x在列表中出現(xiàn)的次數(shù)
reverse() 將列表逆轉(zhuǎn)
sort(key=None,reverse=False) 對列表中的元素進(jìn)行排序,key表示排序規(guī)則,F(xiàn)alse表示升序,True表示降序
L1 = [1,2,3,4]
L2 = [5,6,7,8]
L1 = L1+L2 會產(chǎn)生并返回一個新列表
L1 += L2 實質(zhì)上是調(diào)用extend,并不會產(chǎn)生新列表,效率比+高,推薦使用+=
[x*x for x in range(10)]
# 實現(xiàn)嵌套列表的平鋪
vec=[[1,2,3],[4,5,6],[7,8,9]]
[num for elem in vec for num in elem] # 輸出[1,2,3,4,5,6,7,8,9]
# 過濾不符合元素
import os
[filename for filename in os.listdir('.') if filename.endswith('.py')]
# 同時遍歷多個列表或可迭代對象
[(x,y) for x in range(1,4) for y in range(1,6,2) if x==y] 輸出[(1, 1), (3, 3)]
# 使用列表推導(dǎo)式實現(xiàn)矩陣轉(zhuǎn)置
mattrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
[[row[i] for row in mattrix] for i in range(10)]# 輸出[[1,5,9],[2,6,10],[3,7,11],[4,8,12]]
# 列表推導(dǎo)式可以使用函數(shù)或復(fù)雜表達(dá)式
def fun(x):
if x%2==0:
return x**2
else:
return x+1
[fun(x) for x in range(4) if x>0] # 輸出[2,4,4,16]
# 列表推導(dǎo)式支持文件迭代
with open('my.ini','r') as f:
print([line for line in f])
# 使用列表推導(dǎo)式生成100以內(nèi)的素數(shù)
from math import sqrt
[p for p in range(2,100) if 0 not in [p%d for d in range(2,int(sqrt(p)+1))]]
犀利的切片
使用切片獲取列表部分元素
num_list = list(range(10))
num_list[::] # 返回包含原列表中所有元素的新列表
num_list[::-1] # 返回包含原列表中所有元素的逆序列表
num_list[::2] # 隔一個取一個,返回包含原列表中偶數(shù)位置的列表
num_list[1::2] # 隔一個取一個,返回包含原列表中奇數(shù)位置的列表
num_list[3:6] # 指定切片的起始位置
num_list[0:100] # 切片結(jié)束位置大于列表長度時,從列表尾部截斷
num_list[100] # 拋出異常,不允許越界訪問
num_list[100:] # 切片開始位置大于列表長度時,返回空列表
使用切片為列表增加元素
num_list[len(num_list):]=[9] # 在列表尾部插入元素
num_list[:0]=[1,2] # 在列表頭部插入多個元素
num_list[3:3]=[4] # 在列表的某個位置插入元素
使用切片替換和修改列表中的元素
num_list[:3]=[1,2,3] # 替換元素,等號兩邊的列表長度必須相等,否則拋出異常
num_list[3:] = [4,5,6] # 連續(xù)替換
num_list[::2]=[0]*3 # 隔一個替換一個
num_list[1::2]=range(3) # 從開始位置隔一個替換一個
使用切片刪除列表中的元素
num_list[:3]=[] # 刪除前三個元素
del num_list[::3] # 刪除前三個元素
del num_list[::2] # 隔一個刪除一個
元組與列表的異同點
列表和元組都屬于有序集合,都支持雙向索引訪問內(nèi)部,以及使用count()、index()、len()、map()、filter()、等大量內(nèi)置函數(shù)和+、*、+=、in等運算符,元組屬于不可變序列,列表屬于可變序列,因此,元組沒有提供append()、insert()、extend()等方法,同樣元組也沒有提供remove()、pop()方法,不能使用del刪除元組中的元素,只能使用del刪除整個元組,元組可以使用切片,但是只能使用切片訪問元素,不支持修改和刪除操作,而且元組在內(nèi)部做了大量優(yōu)化,因此,元組的效率比列表要高,訪問速度要比列表高許多,建議使用元組,因為元組的不可變性決定了使用元組更加安全可靠
生成器推導(dǎo)式在用法上和列表推導(dǎo)式類似,形式上使用()作為定界符,最大的不同時生成器返回的是一個生成器對象,生成器對象和迭代器對象類似,都具有惰性的特點,只在調(diào)用時才會產(chǎn)生新元素,比列表推導(dǎo)式具有更高的效率,空間占用率低,適用于大數(shù)據(jù)的場景,使用生成器產(chǎn)生元素時,可以將其轉(zhuǎn)換為列表、元組,也可以使用生成器對象的next()方法和next()進(jìn)行遍歷,或者直接使用for循環(huán)遍歷,但是無論哪種形式,只能從前往后訪問其中的元素,不可以訪問已經(jīng)訪問過的元素
g=(i**2 for i in range(10)) # 創(chuàng)建生成器對象 print(g) # 輸出<generator object <genexpr> at 0x0000028366F8AAF0> tuple_g=tuple(g) # 將生成器對象轉(zhuǎn)換成元組 print(tuple_g) # 輸出(0, 1, 4, 9, 16, 25, 36, 49, 64, 81) list_g=list(g) # 將生成器對象轉(zhuǎn)換成列表 print(list_g) # 輸出[] g=(i**2 for i in range(10)) # 重新獲取生成器 list_g=list(g) # 將生成器對象轉(zhuǎn)換成列表 print(list_g) # 輸出[0, 1, 4, 9, 16, 25, 36, 49, 64, 81] g=(i**2 for i in range(10)) # 重新獲取生成器對象 print(g.__next__()) # 輸出0 print(next(g)) # 輸出1 g=(i**2 for i in range(10)) # 重新獲取生成器對象 for i in g: print(i,end=' ') # 輸出0 1 4 9 16 25 36 49 64 81
字典中的每個元素表示一種映射關(guān)系或?qū)?yīng)關(guān)系,根據(jù)提供的鍵作為下標(biāo),可以訪問對應(yīng)的值,如果不存在這個鍵
會拋出異常,內(nèi)置函數(shù)len()、max()、min()、sum()、sorted()、map()、filter()、enumerate()等同樣適用于字典
get(x[,y]) 如果字典中存在該鍵則返回對應(yīng)的值,否則返回指定值
setdefault(x[,y]) 指定的鍵存在,返回對應(yīng)的值,如果鍵不存在,就添加一個新元素并設(shè)置對應(yīng)值默認(rèn)為None
values() 遍歷字典的值
keys() 遍歷字典的鍵
items() 遍歷字典的鍵和值
pop() 彈出指定鍵對應(yīng)的元素,并返回被刪除的元素
clear() 清空字典中的所有元素
集合屬于Python無序可變序列,使用一對大括號作為定界符,元素之間使用逗號分隔,同一個集合內(nèi)的每個元素都是唯一的,元素之間不允許重復(fù),集合中只能包含數(shù)字、字符串、元組等不可變類型,內(nèi)置函數(shù)len()、max()、min()、sum()、sorted()、map()、filter()、enumerate()等同樣適用于字典
集合運算
num1 = {1,2,3,4,5}
num2 = {5,6,7,8,9}
print(num1|num2) # {1, 2, 3, 4, 5, 6, 7, 8, 9}
print(num1.union(num2)) # {1, 2, 3, 4, 5, 6, 7, 8, 9}
print(num1-num2) # {1, 2, 3, 4}
print(num1.difference(num2)) # {1, 2, 3, 4}
print(num1&num2) # {5}
print(num1.intersection(num2)) # {5}
set() 將列表、元組、字符串、range對象等其他可迭代對象轉(zhuǎn)換成集合,如果原來的數(shù)據(jù)中存在重復(fù)數(shù)據(jù),轉(zhuǎn)換成集合后將只保留一個,如果原序列有可變類型,將無法轉(zhuǎn)換成集合,拋出異常
add() 將元素添加到集合中,如果集合中存在該元素將忽略此操作
update() 將另一個集合中的元素添加到當(dāng)前集合中,并自動去除重復(fù)元素
pop() 隨機(jī)刪除并返回集合中的一個元素,如果集合為空則拋出異常
remove(x) 刪除集合中一個指定的元素,如果不存在則拋出異常
discard(x) 刪除集合中一個指定的元素,如果不存在則忽略此操作
clear() 清空集合