8. 字串與列表的內建方法
阿新 • • 發佈:2022-03-09
字串的內建方法
1. 需要掌握的操作
2. 瞭解的操作
列表的內建方法
1. 型別轉換
2. 常見操作
可變與不可變型別
佇列與堆疊
一、字串的內建方法
前情回顧:索引取值、切片、統計長度、成員運算、去掉首尾指定字元strip()方法、指定字元切割split()方法
1. 需要掌握的操作
1.移除字串首尾的指定字元
s1 = '*****Messi******'
print(s1.strip('*')) # Messi 左右都移除
print(s1.lstrip('*')) # Messi****** 移除左邊
print(s1.rstrip('*')) # *****Messi 移除右邊
2.大小寫相關操作
s2 = 'Leo111Messi'
print(s2.lower()) # leo1111messi 將所有的英文字母變成小寫
print(s2.upper()) # LEO111MESSI 將所有的英文字母變成大寫
print(s2.islower()) # False 判斷字串中所有的英文字母是否純小寫,,結果是布林值
print(s2.isupper()) # False 判斷字串中所有的英文字母是否純大寫,,結果是布林值
大小寫操作的應用案例:
圖片驗證碼(由數字、大寫字母、小寫字母組成),輸入驗證碼時,可以忽略大小寫
verify = 'MeSsI10'
print('這是給使用者展示的驗證碼:%s' % verify)
user_verify = input('請輸入驗證碼:')
if verify.lower() == user_verify.lower():
print('輸入正確')
else:
print('輸入錯誤')
3.判斷字串的開頭或者結尾是否是指定的字元
s3 = 'Messi Ronaldo Neymar 666'
print(s3.startswith('M')) # True 結果是布林值
print(s3.startswith('Messi')) # True
print(s3.startswith('Ronaldo')) # False
print(s3.endswith(' 6')) # True
print(s3.endswith('666')) # True
4.格式化輸出
方式一:佔位符 %s %d
message = '%s您好,您%s月話費%s元,餘額%s元'
print(message % ('里奧', 2, 88, 12))
方式二:format方法(分為4種)
玩法1:跟佔位符一致,使用{ }佔位
print('His name is {} his age is {}'.format('梅西', 35))
玩法2:根據索引取值,可以反覆使用
print('His name is {0} {0} {0}, his age is {1}'.format('梅西!', 35))
玩法3:根據名字的對應關係取值(可以不按順序)
print('His name is {name} {name}, age is {age}, goals is {goals}'.format(age=35, goals=91, name='梅西!'))
玩法4:直接使用已經出現過的變數(使用頻率比較高)
name = '梅西'
age = 35
print('His name is {name}, his age is {age}') # 不使用f 列印:print('His name is {name}, his age is {age}')
print(f'His name is {name}, his age is {age}') # f-string,稱為格式化字串常量 列印:His name is 梅西, his age is 35
5.拼接字串
s4 = '阿根廷足球巨星 里奧梅西 '
s5 = '葡萄牙足球巨星 C羅'
print(s4 + s5) # 如果字串很大,加號效率較低
print(s4 * 3) # 重複次數
join方法相當於將括號內的元素進行for迴圈
print('@'.join(s4)) # 阿@根@廷@足@球@巨@星@ @裡@奧@梅@西@
將列表拼接成字串
print('&'.join(['梅西', 'C羅', '林加德', '內馬爾'])) # 梅西&C羅&林加德&內馬爾
join括號內的元素必須是字串,否則報錯
l2 = [10, 30, '梅西']
'~'.join(l2) # 報錯
6.替換字串中指定的字元
s6 = 'Messi is goat goat goat Messi Messi Messi'
將Messi替換成NeyMar
print(s6.replace('Messi', 'NeyMar')) # 預設一次性替換所有
print(s6.replace('Messi', 'NeyMar', 2))
# NeyMar is goat goat goat NeyMar Messi Messi 指定替換的個數
7.判斷字串中是否是純數字
s7 = 'Ronaldo7'
print(s7.isdigit()) # False
print('111222'.isdigit()) # True
print('33.44'.isdigit()) # False
isdigit應用:
num = input('請輸入分數:')
if num.isdigit():
num = int(num)
print(f'您輸入的分數是:{num}')
else:
print('請好好寫')
2. 瞭解的操作
1.查詢指定字串對應的索引值
s1 = 'messi ronaldo neymar'
print(s1.find('e')) # 1 從左往右找,找到第一個就結束
print(s1.find('x', 0, 19)) # -1 意思是沒有,找不到
print(s1.index('r', 0, 19)) # 6
print(s1.index('x', 0, 19)) # index方法找不到直接報錯,不推薦使用
2.文字位置改變
s2 = 'LeoMessi'
print(s2.center(30, '-')) # 總寬度為30,字串居中顯示,不夠用-填充
-----------LeoMessi-----------
print(s2.ljust(20, '@')) # 總寬度為20,字串左對齊,不夠用@填充
LeoMessi@@@@@@@@@@@@
print(s2.rjust(40, '&')) # 總寬度為40,字串右對齊,不夠用&填充
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&LeoMessi
print(s2.zfill(15)) # 總寬度為15,字串右對齊,不夠用0填充
0000000LeoMessi
3.特殊符號:斜槓與一些英文字母的組合會產生特殊的含義
print('leo\tMESSI\nNEYMAR\aRONALDO')
"""
leo MESSI
NEYMARRONALDO
\t 水平製表符,用於橫向跳到下一製表位
\n 換行符
\a 響鈴(BEL)
"""
如果想取消特殊含義,可以在字串前面加r(raw string 不進行轉義)
print(r'leo\tMESSI\nNEYMAR\aRONALDO')
leo\tMESSI\nNEYMAR\aRONALDO
4.capitalize、swapcase、title
# capitalize:首字母大寫
s4 = 'hi,lionel messi'
print(s4.capitalize()) # Hi,lionel messi
# swapcase:大小寫反轉
s5 = 'HELLO,ronaldo'
print(s5.swapcase()) # hello,RONALDO
# title:每個單詞的首字母大寫
s6 = 'good morning, cristiano ronaldo'
print(s6.title()) # Good Morning, Cristiano Ronaldo
二、列表的內建方法
1. 型別轉換
list可以轉換支援被for迴圈的資料型別(可迭代的物件) 可迭代物件:字串、列表、元組、字典、集合 不可迭代物件:整型、浮點型、布林值
print(list(11)) # 整型,不可以print(list(22.33)) # 浮點型,不可以print(list(True)) # 布林值,不可以
print(list('messi')) # ['m', 'e', 's', 's', 'i']
print(list((11, 22, 33, 44))) # [11, 22, 33, 44]
print(list({'name': '梅西', 'age': 35})) # ['name', 'age']
print(list({5, 6, 7, 8, 9})) # [5, 6, 7, 8, 9]
2. 常見操作
player = ['梅西', 'C羅', '貝爾', '萊萬', '卡瓦尼']
# 1.索引取值
print(player[0]) # 梅西
print(player[-1]) # 卡瓦尼
# 2.切片操作(類比字串的切片和range函式)
print(player[1:4]) # ['C羅', '貝爾', '萊萬']
print(player[1:4:2]) # 第三個引數2用於控制步長['C羅', '萊萬']
print(player[-4:-1]) # 索引值為負數 ['C羅', '貝爾', '萊萬']
print(player[-1:-4:-1]) # 第三個引數-1用於控制反方向取 ['卡瓦尼', '萊萬', '貝爾']
# 3.統計列表中元素的個數
print(len(player)) # 5
# 4.成員運算(最小判斷單位是元素不是元素裡面的單個字元)
print('西' in player) # False
print('梅西' in player) # True
player = ['梅西', 'C羅', '貝爾', '萊萬', '卡瓦尼']
5.列表中新增元素的方式
5.1尾部追加單個元素
print(player.append('大英帝國球王林加德')) # 列印的值為None
print(player) # ['梅西', 'C羅', '貝爾', '萊萬', '卡瓦尼', '大英帝國球王林加德']
player.append([111, 222, 333])
print(player) # ['梅西', 'C羅', '貝爾', '萊萬', '卡瓦尼', '大英帝國球王林加德', [111, 222, 333]]
5.2指定位置插入單個元素
print(player.insert(0, 111)) # 列印的值為None;;player.insert(0, 123)的執行不會返回值
print(player) # [111, '梅西', 'C羅', '貝爾', '萊萬', '卡瓦尼']
player.insert(1, '---球王---')
print(player) # ['梅西', '---球王---', 'C羅', '貝爾', '萊萬', '卡瓦尼']
player.insert(2, [11, 22, 33])
print(player) # ['梅西', 'C羅', [11, 22, 33], '貝爾', '萊萬', '卡瓦尼']
5.3合併列表
extend可以看作是for迴圈+append
player.extend([333, 444, 555])
print(player) # ['梅西', 'C羅', '貝爾', '萊萬', '卡瓦尼', 333, 444, 555]
上述程式碼的for迴圈實現方式:
for i in [333, 444, 555]:
player.append(i)
print(player)
還可以用增量賦值實現 player += [333, 444, 555],類比於使用加號拼接字串,加號的效率不高
player = ['梅西', 'C羅', '貝爾', '萊萬', '卡瓦尼']
6.刪除元素
6.1通用的刪除方式
del player[0] # 通過索引刪除
print(player) # ['C羅', '貝爾', '萊萬', '卡瓦尼']
6.2就地刪除(使用元素名稱刪除) 沒有返回值
print(player.remove('卡瓦尼')) # None
print(player) # ['梅西', 'C羅', '貝爾', '萊萬']
6.3延遲刪除
pop(),預設刪除列表最後一個元素,並將刪除的值返回,括號內可以通過加索引值來刪除指定元素
print(player.pop()) # 卡瓦尼 不寫入索引值刪除末尾
print(player) # ['梅西', 'C羅', '貝爾', '萊萬']
print(player.pop(2)) # 貝爾
print(player) # ['梅西', 'C羅', '萊萬', '卡瓦尼']
player = ['梅西', 'C羅', '貝爾', '萊萬', '卡瓦尼']
# 7.修改列表元素
print(id(player[0])) # 2281066470720
player[0] = 'AAA'
print(id(player[0])) # 2281067094960
print(player) # ['AAA', 'C羅', '貝爾', '萊萬', '卡瓦尼']
# 8.排序
s8 = [33, 55, 44, 11, 66, 77, 22, 99, 88]
# s8.sort() # 預設是升序
# print(s8) # [11, 22, 33, 44, 55, 66, 77, 88, 99]
s8.sort(reverse=True) # 可以修改為降序
print(s8) # [99, 88, 77, 66, 55, 44, 33, 22, 11]
player = ['梅西', 'C羅', '貝爾', '萊萬', '卡瓦尼']
# 9.翻轉
player.reverse()
print(player) # ['卡瓦尼', '萊萬', '貝爾', 'C羅', '梅西']
# 10.比較運算
# 列表在作比較的時候,比的是對應索引位置上的元素
s10 = [11, 22, 33]
s11 = [1, 2, 3, 4, 5, 6]
print(s11 > s10) # False
# 字串的大小是按照ASCII碼錶的先後順序加以區別,表中排在後面的字元大於前面的
# A在ASCII碼錶中的值為65,a為97
s12 = ['A', 'B', 'C']
s13 = ['a']
print(s13 > s12) # True
# 11.統計列表中某個元素出現的次數
s14 = [111, 222, 222, 333, 333, 333, 444, 444, 444, 444]
print(s14.count(333)) # 3
# 12.清空列表
s15 = [1, 2, 3]
s15.clear()
print(s15) # []
三、可變與不可變型別
可變型別
舉例:列表
值改變,列表記憶體地址不變
不可變型別
舉例:字串
值改變,記憶體地址一定發生變化
# 1.字串是不可變型別
s1 = '@@@Messi@@@'
print(s1.strip('@')) # Messi strip方法產生了新的值,s1值的本身沒有修改
print(s1) # @@@Messi@@@
# 2.列表是可變型別 l2 = [1, 2, 3] print(id(l2)) # 2640212011592 print(l2.extend(['aaa', 'bbb'])) # 列印None print(l2) # [1, 2, 3, 'aaa', 'bbb'] print(id(l2)) # 2640212011592 列表增加元素後,列表的記憶體地址沒有發生變化
四、 佇列與堆疊
佇列
先進先出 類似於從桶的底下放水
堆疊
先進後出 類似於從桶的表面打水
使用列表模擬佇列與堆疊
# 1.佇列
l3 = []
# 先進
l3.append(111)
l3.append(222)
l3.append(333)
# 先出
print(l3.pop(0)) # 每次將0號索引的值刪除,並且將刪除的值返回
print(l3.pop(0))
print(l3.pop(0))
# 2.堆疊
l4 = []
# 先進
l4.append(444)
l4.append(555)
l4.append(666)
# 後出
print(l4.pop()) # pop方法預設刪除列表的最後一個元素,每次將最後一個元素刪除,並且將刪除的值返回
print(l4.pop())
print(l4.pop())