字串,列表的內建方法
阿新 • • 發佈:2022-03-09
本章內容
- 字串的其他內建方法
- 列表內建方法
- 可變型別與不可變型別
- 佇列與堆疊
字串的其他內建方法
1.移除字串首尾的指定字元,可以選擇方向 eg: s = '$$$$username$$$$' print(s.strip('$')) # username print(s.lstrip('$')) # username$$$$ print(s.rstrip('$')) # $$$$username 2.大小寫相關的操作 eg: s = 'TonytonY' print(s.lower()) # tonytony print(s.upper()) # TONYTONY # 判斷字串內的所有英文是不是純小寫 print(s.isupper()) # Flase # 判斷字串內的所有英文是不是純小寫 print(s.isupper()) # Flase # 文字驗證碼的原理: real_tetx = 'Alex' text = input('輸入您的驗證碼>>>:').strip() if real_text.isupper() == text.isupper: print('輸入正確') # 其實就是統一轉換為大寫或者小寫,然後進行校驗 3.判斷字串的開頭或者結尾是否有指定的字元 eg: s = 'jason tony 老劉' print(s.startswith('j')) # True print(s.endswith('老劉')) # True print(s.startswith('jason')) # True 4.格式化輸出的傳統方式和四種玩法 eg: # 傳統方式 s = my name is %s my age is %d print(s % ('tony', 18)) # 玩法一: s = 'my name is {} my age is {}' print(s.format('jsaon', 18)) # 玩法二: s = 'my name is {0} {0} {0} my age is {1}' print(s.format('tony', 10)) # 玩法三: s = 'my name is {name}{name} my age is {age}' print(s.format(name='tony', age=19)) # 玩法四: name = 'tony' age = 99 print(f'my name is {name} my age is {age}') 5.拼接字串 eg: s1 = 'abcd' s2 = 'efgh' print(s1 + s2) # abcdefgh print(s1 * 10) # abcdabcdabcdabcdabcd print('|'.join(s1)) # a|b|c|d print("$".join(['ab', 'cd', 'ef', 'gh'])) # ab$cd$ef$gh """ join方法相當於把資料內的元素做了一次for迴圈,每次迴圈便加入拼接的字元 """ s = [22, 'tony', 'tom', 'jerry'] print('$'.join(s))
# 如果拼接了不是字串型別的資料,則會報錯,如上圖所示: # 所以join拼接的元素必須都是字串 6.替換字串中指定的字元 eg: # 預設替換一次性替換一個元素的所有相同元素 s = 'tom tom kevin jerry marie lukas kevin' print(s.replace('tom', 'jerry')) s = 'tom tom kevin jerry marie lukas kevin' print(s.replace('tom', 'tony',1)) # 替換順序預設從左往右 7.判斷字串中是否是純數字 eg: s = 'tony999' print(s.isdigit()) # Flase s = '123456' print(s.isdigit()) # True score = input('score>>>:') if score.isdigit(): score = int(score) print(score) else: print('好好寫')
"""################必會操作####################""" 1.查詢指定字元所對應的索引值 s = 'my name is tony' print(s.find('n')) # 列印3 # 此處沒有列印tony所在的n的索引,因為find查詢是從左向右,找到一個就結束 # 也可以定義查詢的範圍: print(s.find('a', 5, 8)) # # 列印-1,意思是沒有找到 print(s.index('a', 5, 8)) # 直接報錯,平常不建議使用 2.文字位置的改變 eg: s = 'username' print(s.center(30,'-')) # -----------username----------- print(s.ljust(30, '-')) # username---------------------- print(s.rjust(30, '-')) # ----------------------username print(s.zfill(40)) # 00000000000000000000000000000000username 3.特殊符號:斜槓與一些英文字母的組合會產生特殊的含義 print('my name is tony\nmy age is 18')
print('my name \ais tony\nmy age\t is 18')
# 如果要取消效果,可以在前面加一個字母r eg:
4.capitalize,swapcase,title的用法
4.1 capitalize: 首字母大寫 eg:
text = 'I am a STUDENT'
print(text.capitalize()) # I am a student
4.2 swapcase 字母大小寫反轉 eg:
print(text.swapcase()) # i AM A student
4.3 title: 全部首字母大寫 eg:
print(text.title()) # I Am A Student
列表內建方法
1.型別轉換 eg:
"""列表內是整型和浮點型以及布林值不可以轉換,如下:"""
1.1 字串轉換:
print(list('my name')) # ['m', 'y', ' ', 'n', 'a', 'm', 'e']
1.2 字典的轉換:
print(list({'name':'tony','age':18})) # ['name', 'age']
1.3 元組的轉換:
print(list((1,2,3,4,5))) # [1, 2, 3, 4, 5]
1.4 集合的轉換:
print(list({1,2,3,4,5,5,'tony'})) # [1, 2, 3, 4, 5, 'tony']
"""
由上述可以得出:只要可以進行for迴圈的資料型別都可以進行列表的轉換
"""
2. 常見操作如下圖:
3. 間隔:
4.統計列表中元素的個數:
name_list = ['name', 'age', 'gender', 18]
print(len(name_list)) # 4
5. 成員運算
"""最小的判斷條件是單個元素,而不是元素中的字元"""
name_list = ['name', 'age', 'gender', 18]
print('name' in name_list) # True
name_list = ['name', 'age', 'gender', 18]
print('n' in name_list) # False
6. 列表新增元素的方式
6.1 尾部追加'單個'元素:
name_list = ['name', 'age', 'gender', 18]
name_list.append('小王')
print(name_list) # ['name', 'age', 'gender', 18, '小王']
name_list.append(['小王'])
print(name_list) # ['name', 'age', 'gender', 18, ['小王']]
6.2 指定位置新增'單個'元素:
name_list.insert(3,'小王')
print(name_list) # ['name', 'age', 'gender', '小王', 18]
6.3 合併列表:
age_list = [18, 15, 16]
name_list.extend(age_list) # 第一種
name_list += age_list # 第二種
print(name_list) # ['name', 'age', 'gender', 18, 18, 15, 16]
# 加號的效率不高
"""extend可以看成是for迴圈+append"""
eg:
for i in age_list:
name_list.append(i)
print(name_list)
7. 刪除元素
7.1 通用的刪除方式
name_list = ['name', 'age', 'gender', 18]
del name_list[0]
print(name_list) # ['age', 'gender', 18]
7.2 就地刪除的方式
name_list.remove('name')
print(name_list) # ['age', 'gender', 18]
7.3 延遲刪除
name_list.pop()
print(name_list) # ['name', 'age', 'gender']
# pop() 也可以指定索引值
name_list.pop(2)
print(name_list) # ['name', 'age', 18]
8. 修改元素列表
name_list[1] = 'male'
print(name_list) # ['name', 'male', 'gender', 18]
# 修改改變的是索引為1的記憶體地址,並不是anme_list的記憶體地址 eg:
print(id(name_list[1])) # 2085094278120
name_list[1] = 'male'
print(id(name_list[1])) # 2085095121448
9. 排序
s = [11, 66, 33, 22, 55,88]
s.sort()
print(s) # [11, 22, 33, 55, 66, 88]
# 修改尾序
s.sort(reverse=True)
print(s) # [88, 66, 55, 33, 22, 11]
10.反轉
s.reverse()
print(s) # [88, 55, 22, 33, 66, 11]
11.比較運算
s = [11, 12, 34, 33]
s2 = [2, 3, 4]
print(s > s2) # True 只比較第一個元素,如果是字元,則轉換為字元所構成的數字進行比較,比較就是比較索引位置上的元素 eg:
s1 = ['A', 'B', 'C'] # A>>>65
s2 = ['a', 'b'] # a>>>97
print(s1 > s2) # False
12.統計列表中元素出現的個數
l = ['jason','jason','jason','tony','tom','tom']
print(l.count('jason')) # 3
13. 清空列表
l.clear()
print(l) # []
可變型別與不可變型別
"""
可變型別與不可變型別
可變型別 列表
值改變 記憶體地址不變 修改的是本身
不可變型別 字串
值改變 記憶體地址肯定遍 修改過程產生了新的值
如何檢視變數的'記憶體地址'
"""
# 話不多說,直接畫解析圖:
# 如果改變的是列表中一個元素的值,那麼這個列表本身的記憶體地址沒有改變,改變的是索引對應的記憶體地址,所以列表是一個可變的資料型別
# 如果改變的是一個字串的值,那麼它會生成新的記憶體地址,原來的記憶體地址不變,所以字串是不變的資料型別,如圖:
# 程式碼體現:
s = '%%%tony%%%'
print(s.strip('%')) # s.strip(%)是新的值 tony
print(s) # %%%tony%%% 原來的記憶體地址不變
佇列與堆疊
# 佇列:先進先出 eg:超市排隊結賬 符合佇列的特徵
# 堆疊:先進後出 eg:疊衣服 符合堆疊的特徵
#列表模擬佇列與堆疊
s = []
s.append('tony')
s.append('tom')
s.append('jerry')
for i in s:
print(i)
# 列印結果:
# tony
# tom
# jerry
# 堆疊
s = []
s.append('tony')
s.append('tom')
s.append('jerry')
print(s.pop())
print(s.pop())
print(s.pop())
# 列印結果為:
# jerry
# tom
# tony