06 - 字符串&列表📄目錄1 字符串編碼1.1 字符串編碼轉換2 字符串常見操作2.1 + 字符串拼接2.2 * 重複輸出2.3 成員運算符2.4 [] 索引字符串 和 下標2.5 [:] 切片3 其他字符串常見操作3.1 查找3.2 判斷3.3 修改元素4 列表5 列表的常見操作5.1 添加元素5.2 修改元素5.3 查找元素5.4 刪除元素5.5 排序5.6 列表推導式5.7 列表嵌套導航連結:
💡
本質上就是二進制數據與語言文字的一一對應關係
Unicode:所有字符都是2個字節,好處是字節和數字之間轉換更快,但占用空間大
UTF-8:不同字符用不同長度表示,優點和缺點和Unicode相反
編碼:encode()
將其他編碼的字符串轉換成Unicode編碼
解碼:decode()
將Unicode編碼轉換成其他編碼的字符串
xxxxxxxxxxa = "hello"print(a , type(a)) # str,字符串是以字符為單位進行處理a1 = a.encode() # 編碼print(f'編碼後:{a1}')print(a1 ,type(a1)) # bytes,變成以字節為單位進行處理a2 = a1.decode() # 解碼print(type(a2))# 注意:對於bytes,只需要知道它與字符串類型之間的互相轉換xxxxxxxxxxmo = "我目前在澳門"mo1 = mo.encode('utf-8')print(mo1, type(mo1))mo2 = mo1.decode('utf-8')print(mo2, type(mo2))+ 字符串拼接
xxxxxxxxxxprint(1 + 1) # 整數相加,+是算術運算符print("Pan-Indochina" + "Earthscraper" + "Museum") # 字符串相加,+是字符串拼接name1 = "超級"name2 = "鐵路"print(name1 + name2)輸出結果:
xxxxxxxxxx2Pan-IndochinaEarthscraperMuseum超級鐵路* 重複輸出
xxxxxxxxxxprint("我最叻\n" * 5) # \n換行輸出結果:
xxxxxxxxxx我最叻我最叻我最叻我最叻我最叻💡
作用:檢查字符串中是否包含了某個子字符串(可以是一個或多個字符)
in:如果包含的話,返回True;不包含返回False
not in:如果不包含的話,返回Ture;包含返回False
xxxxxxxxxxname = "Pan-Indochina Earthscraper Museum"print('b' in name) # Falseprint('E' in name) # Trueprint('b' not in name) # Trueprint('Indo' in name) # 多個字符,返回True[] 索引字符串 和 下標💡 Python中下標從0開始
作用:通過下標能夠快速找到對應的數據
格式:字符串名[下標值]
xxxxxxxxxxe = "Earthscraper"print(e[0]) # 索引字符串中的字符,由左往右數,下標由0開始print(e[-2]) # 由右至左數,下標由-1開始[:] 切片💡
含義:針對操作的對象截取其中一部分
語法:[開始位置:結束位置:步長]
❗ 注意:包前不包後原則

xxxxxxxxxxprint(e[1:7]) # 包前不包後原則,只有6個字符print(e[5:]) # 截取第5位(第6個字符)至最後一位print(e[-2:]) # 截取-2位至(右邊)最後一位print(e[:-2]) # 截取(左邊)至-2位輸出結果:
xxxxxxxxxxarthscscrapererEarthscrap步長的絕對值決定間隔,符號決定方向
💡
xxxxxxxxxxprint(e[1::3]) # 自第二位,從左往右每3位取一字符print(e[::-2]) # 自右邊,從右往左每2位取一字符輸出結果:
xxxxxxxxxxahrerprsta💡
find()
功能:檢查某個「子字符串」是否包含在字符串中,如果在就返回「子字符串」開位始置的下標,否則就返回-1
格式:find(子字符串,開始位置下標,結束位置下標)
❗ 開始和結束位置下標可以省略,此時表示在整個字符串查找

xxxxxxxxxxname = 'Valentine'print(name.find('i')) # 第1個i的下標為6print(name.find('ent')) # 第一個ent,e的下標為3print(name.find("i",7)) # 唯一的i的下標為6,沒有找到,因此返回-1print(name.find('n',6,8)) # 在下標6至8的字符串中,第一個n的下標是7輸出結果:
xxxxxxxxxx63-17💡
index()
功能:檢測某個子字符串是否包含在字符串中,在就返回子字符串開始位置的下標,否則報錯
格式:index(子字符串,開始位置下標,結束位置下標)

xxxxxxxxxxname1 = "長崎良尾約咗川口督史食飯"print(name1.index('良'))# print(name.index('約',1,3)) # 約字的下標是4,此行直接報錯print(name1.index('約',1,6))輸出結果:
xxxxxxxxxx24💡
count()
功能:返回某個子字符串在整個字符串中出現的次數,沒有就返回0
格式:count(子字符串,開始位置下標,結束位置下標)

xxxxxxxxxxname2 = "earthscraper"print(name2.count('e')) # 2個print(name2.count('e',1,6)) # 沒找到print(name2.count('r',2,12)) # 找到3個輸出結果:
xxxxxxxxxx203💡
startswith()
功能:是否以某個子字符串開頭,是的話就返回True,不是的話就返回False。如果設置開始和結束位置,則在指定範圍內檢查
格式:startswith(子字符串,開始位置下標,結束位置下標)

xxxxxxxxxxname3 = "earthscraper"print(name3.startswith('e')) # 返回True,因為字符串的確以e開頭print(name3.startswith('esr')) # Falseprint(name3.startswith('e',0,1)) # Trueprint(name3.startswith('e',4,10)) # False輸出結果:
xxxxxxxxxxTrueFalseTrueFalse💡
endswith()
功能:是否以某個子字符串結尾,是的話就返回True,不是的話就返回False。如果設置開始和結束位置,則在指定範圍內檢查
格式:endswith(子字符串,開始位置下標,結束位置下標)
使用方式大致與startswith()相同

xxxxxxxxxxname3 = "earthscraper"print(name3.endswith('e'))輸出結果:
xxxxxxxxxxFalse💡
isupper()
功能:檢查字符串中所有的字母是否都為大寫,是的話就返回True

xxxxxxxxxxname4 = "VICTORIA"print(name4.isupper())輸出結果:
xxxxxxxxxxTrue💡
replace()
功能:替換
語法:replace(舊內容,新內容,替換次數)
❗ 替換次數可以省略,默認全部替換

xxxxxxxxxxname = "好好學習,天天向上"print(name.replace('天','月'))print(name.replace('天','月',1))輸出結果:
xxxxxxxxxx好好學習,月月向上好好學習,月天向上💡
split()
功能:指定分隔符來切字符串

xxxxxxxxxxst = "hello,python"print(st.split(",")) # 以列表的方式返回['hello', 'python']print(st.split("v")) # 如果字符串中不包含分割內容,就不進行分割,會作為一個整體print(st.split("o",1)) # 指定分割次數輸出結果:
xxxxxxxxxx['hello', 'python']['hello,python']['hell', ',python']💡
capitalize()
功能:第一個字符大寫,其他都變小寫(無論原先如何)

xxxxxxxxxxst = "victoria"print(st.capitalize())輸出結果:
xxxxxxxxxxVictoria💡
lower()
功能:大寫字母轉為小寫

xxxxxxxxxxst = "VICTORIA"print(st.lower())輸出結果:
xxxxxxxxxxvictoria💡
upper()
功能:小寫字母轉為大寫

xxxxxxxxxxst = "victoria"print(st.upper())輸出結果:
xxxxxxxxxxVICTORIA📌 基本格式:
列表名 = [元素1,元素2,元素3,...]
❗ 所有元素放在[]內,元素之間用,隔開
元素之間的數據類型可以各不相同

xxxxxxxxxxl1 = [ 1 , 2 , '3' , 4]print(l1, type(l1))print(l1[2])# 列表也可以進行切片操作print(l1[0:3])# 列表是可迭代對象,可以for循環遍歷取值for i in l1: print(i)輸出結果:
xxxxxxxxxx[1, 2, '3', 4] <class 'list'>3[1, 2, '3']1234💡 append() extend() insert()

append()
xxxxxxxxxxl2 = ['one', 'two', 'three']l2.append('four') # 整體作為一個元素添加# l2.append(['1','2']) # 不能插入多個元素print(l2)輸出結果:
xxxxxxxxxx['one', 'two', 'three', 'four']
extend()
xxxxxxxxxxl2.extend(['five', 'six', 'seven'])l2.extend('eight') # 分散添加,將另外一個類型中的元素逐一添加print(l2)輸出結果:
xxxxxxxxxx['one', 'two', 'three', 'four', 'five', 'six', 'seven', 'e', 'i', 'g', 'h', 't']
insert()
xxxxxxxxxxl2.insert(7, 'eight') # 指定位置插入元素,如果有元素,原有元素後移print(l2)l2.insert(15, 'ten') # 超過列表長度,就插入為最後一位print(l2)l3 = [1,2,3]l3.extend([4]) # 不能extend(4),會報錯l3.insert(4,5)print(l3)輸出結果:
xxxxxxxxxx['one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'e', 'i', 'g', 'h', 't']['one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'e', 'i', 'g', 'h', 't', 'ten'][1, 2, 3, 4, 5]
insert()
xxxxxxxxxx# 直接通過下標就可以修改l4 = [1 ,2, 3]print(l4[1])l4[1] = "a"print(l4)輸出結果:
xxxxxxxxxx2[1, 'a', 3]💡
in:判斷指定元素是否存在列表中,如果存在的話就返回True,不存在就返回False
not in:與in相反

xxxxxxxxxx# 直接通過下標就可以修改l4 = [1 ,2, 3]print(l4[1])l4[1] = "a"print(l4)輸出結果:
xxxxxxxxxxTrueFalse
用戶輸入昵稱,昵稱重覆則不能使用
xxxxxxxxxx# 定義一個列表,保存已經存在的昵稱name_list = ['Adam', 'Ben', 'Catherine', 'Dennis']while True: name = input('請輸入你的昵稱:')# 判斷昵稱是否已存在 if name in name_list: print(f'您輸入的昵稱{name}已經存在,請重新輸入:')# 如果昵稱不存在 else: print(f'昵稱{name}已經被您使用。')# 保存昵稱至列表 name_list.append(name) print(name_list) # 打破循環 break輸出結果:
xxxxxxxxxx請輸入你的昵稱:123昵稱123已經被您使用。['Adam', 'Ben', 'Catherine', 'Dennis', '123']💡
index:返回指定數據所在位置的下標,如果查找的數據不存在就會報錯
count:統計指定數據在當前列表出現的次數

del:根據下標刪除
xxxxxxxxxxl6 = ['a', 'b', 'c', 'd']del l6[2]print(l6)輸出結果:
xxxxxxxxxx['a', 'b', 'd']
pop:刪除指定下標的數據,python3版本默認刪除最後一個元素
xxxxxxxxxxl7 = ['a', 'b', 'c', 'd']l7.pop() # 點認刪除最後一個元素l7.pop(1) # 不能指定元素刪除,只能根據下標進行刪除,下標不能超出範圍print(l7)輸出結果:
xxxxxxxxxx['a', 'c']
remove:根據元素的值進行刪除
xxxxxxxxxxl8 = ['a', 'b', 'c', 'd', 'b']l8.remove('a')# l8.remove('t') # 列表中不存在元素就會報錯print(l8)l8.remove('b') # 默認刪除最開始出現的元素print(l8)輸出結果:
xxxxxxxxxx['b', 'c', 'd', 'b']['c', 'd', 'b']
sort:將列表按特定順序重新排列,默認從小到大
xxxxxxxxxxl9 = [46,38,2,199,94,9,134,76]l9.sort()print(l9)輸出結果:
xxxxxxxxxx[2, 9, 38, 46, 76, 94, 134, 199]
reverse:倒序,將列表倒置(反過來)
xxxxxxxxxxl9 = [2, 9, 38, 46, 76, 94, 134, 199]l9.reverse()print(l9)輸出結果:
xxxxxxxxxx[199, 134, 94, 76, 46, 38, 9, 2]
💡 基本寫法:
格式一:[表達式 for 變量 in 列表]
注意in後面不僅可以放列表,還可以放range()、可迭代對象
xxxxxxxxxxl10 = [1,2,3,4,5,6][print(i) for i in l10] # 前面的i是表達式l11 = []for i in range(1, 6): print(i) l11.append(i)print(l11)l12 = [][l12.append(i) for i in range(1, 6)]print(l12)輸出結果:
xxxxxxxxxx12345612345[1, 2, 3, 4, 5][1, 2, 3, 4, 5]
💡
格式二:[表達式 for 變量 in 列表 if 條件]
xxxxxxxxxxl12 = []for i in range(1,11): if i % 2 == 1: l12.append(i)print(l12)l13 = [][l13.append(i) for i in range(1, 6) if i % 2 == 1]print(l13)輸出結果:
xxxxxxxxxx[1, 3, 5, 7, 9][1, 3, 5]含義:一個列表裡面又有一個列表

xxxxxxxxxxl14 = ['1', '2', '3', ['4', '5', '6'], '7', '8', '9', '10'] # ['4', '5', '6']是內層列表print(l14[3])print(l14[3][0]) # 取出內列表中下標為0的元素輸出結果:
xxxxxxxxxx['4', '5', '6']4| 目的地 | 超連結 |
|---|---|
| 首頁 | 返回主頁 |
| Python學習 | Python學習 |
| 上一篇 | 05 - 循環語句 |
| 下一篇 | 07 - 元組、字典、集合 |