python之資料型別的內建方法(str, list)
阿新 • • 發佈:2022-03-09
目錄
字串的內建方法
上一個部落格中我講了基礎的的字串內建方法,在這裡我將講訴字串中其他的內建方法。
移除首尾指定字元
# 在字串型別中,我們可以使用strip()來去除首尾指定字元 s1 = ' jason ' # strip()預設去除空格 print(s1.strip()) # 輸出結果:jason s2 = '|||jason||' print(s2.strip('|')) # 輸出結果:jason # 如果想要只去除首部字元或是尾部字元,可以使用lstrip(), rstrip() # 去除尾部 print(s2.rstrip('|')) # 輸出結果:|||jason # 去除首部 print(s2.lstrip('|')) # 輸出結果:jason||
字母大小寫相關操作
# lower()可以將字母全變成小寫,upper()可以將字母全變成大寫
s = 'Abc6DeFF'
print(s.lower()) # 輸出結果:abc6deff
print(s.upper()) # 輸出結果:ABC6DEFF
# islower()可以判斷字串是否全小寫,isupper()可以判斷字串是否全大寫,返回布林值
s1 = 'awdjklh123asd'
print(s1.islower()) # 輸出結果: True
print(s1.isupper()) # 輸出結果: False
判斷字串的開頭或結尾是否是指定字元
s = 'my name is tom' # startswith()用於判斷字串的開頭是否是指定字元,返回布林值 print(s.startswith('my')) # 輸出結果:True print(s.startswith('tom')) # 輸出結果:False # endswith()用於判斷字串的結尾是否是指定字元,返回布林值 print(s.endswith('my')) # 輸出結果:False print(s.endswith('tom')) # 輸出結果:True
字串特殊的輸出方法
# 字串中的format有四種輸出方法 # 方法一:跟佔位符一樣,只不過使用的是{}佔位 print('jason, {}, knight, jkl, {}'.format('tom', 18)) # 輸出結果:jason, tom, knight, jkl, 18 # 方法二:索引取值,可以反覆使用 print('jason, {0}, {1}, knight, jkl, {1}'.format('tom', 18)) # 輸出結果:jason, tom, 18, knight, jkl, 18 # 方法三:指名道姓的方式取值,可以反覆使用 print('jason, {name}, {age}, knight, jkl, {age}'.format(name='tom', age=18)) # 輸出結果:jason, tom, 18, knight, jkl, 18 # 方法四:根據已有變數取值(在輸出字串的外邊添加個f),可以反覆使用 name = 'tom' age = 18 print(f'jason, {name}, {age}, knight, jkl, {age}') # 輸出結果:jason, tom, 18, knight, jkl, 18
拼接字串
s1 = 'abcde'
s2 = 'qwer'
# 最普通的拼接方法,直接相加,或乘個整數,但如果字串很大的話,效率較低
print(s1 + s2) # 輸出結果:abcdeqwer
print(s2 * 2) # 輸出結果:qwerqwer
# 使用join方法拼接
print('|'.join(s1)) #輸出結果:a|b|c|d|e
# 如果括號內是列表等資料型別,那麼列表內的元素必須是字串型別,否則報錯
s3 = ['tom', 'jason', 'tony']
s4 = [12, 'jason', 'tony']
print('@'.join(s3)) # 輸出結果:tom@jason@tony
print('@'.join(s4)) # 會報錯
替換指定字元
# replace()可以替換字串中的指定字元
s = 'aabbccddddee'
print(s.replace('b', '1')) # 輸出結果:aa11ccddddee
# 第三個變數代表需要替換的個數
print(s.replace('d', '1', 2)) # 輸出結果:aabbcc11ddee
判斷是否是純數字
# isdigit()用於判斷字串中是否為純數字
s1 = '85642'
s2 = '564asa54'
print(s1.isdigit()) # 輸出結果:True
print(s2.isdigit()) # 輸出結果:False
查詢指定字元對應的索引值
# 用find()查詢索引值
s1 = 'my name is jackeylove'
print(s1.find('name')) # 輸出結果:3
# 第二個變數代表起始位置,第三個變數代表結束位置,輸出-1代表沒找到
print(s1.find('my', 2, 5)) # 輸出結果:-1
# 用index()查詢索引值
print(s1.index('name')) # 輸出結果:3
# 第二個變數代表起始位置,第三個變數代表結束位置,沒找到會報錯
print(s1.index('my', 2, 5)) # 會報錯
文字位置改變
name = 'tom'
# 方法內變數可以有2個值,第一個代表長度,第二個代表長度不夠時用於補充的字元(只能是單字元)
print(name.center(10, '@')) # 輸出結果:@@@tom@@@@
print(name.rjust(10, '-')) # 輸出結果:-------tom
print(name.ljust(10, '*')) # 輸出結果:tom*******
# 方法內變數只有一個值,表示長度,不夠長度用0補充
print(name.zfill(10)) # 輸出結果:0000000tom
特殊符號
# 特殊符號就是反斜槓與英文字母的組合
print('這裡換行\n被換行了')
'''
輸出結果:
這裡換行
被換行了
'''
# 如果要輸出特殊符號,可以在字串前邊加一個r
print(r'這裡換行\n被換行了') # 輸出結果:這裡換行\n被換行了
首字母大寫與大小寫翻轉
s = 'my name is tom'
# 字串第一個字母大寫,capitalize()
print(s.capitalize()) # 輸出結果:My name is tom
# 每個單詞首字母大寫,title()
print(s.title()) # 輸出結果:My Name Is Tom
# 大小寫翻轉,swapcase()
print(s.swapcase()) # 輸出結果:MY NAME IS TOM
print('AbCd'.swapcase()) # 輸出結果:aBcD
列表的內建方法
型別轉換
# list()可以將除整型、浮點型、布林值以外的型別轉換成列表
print(list('jason')) # 輸出結果:['j', 'a', 's', 'o', 'n']
print(list({'name': 'jason', 'pwd': 123})) # 輸出結果:['name', 'pwd']
print(list((11, 22, 33, 44, 55))) # 輸出結果:[11, 22, 33, 44, 55]
print(list({1, 2, 3, 4, 5})) # 輸出結果:[1, 2, 3, 4, 5]
# ps:所有支援for迴圈的資料型別均可轉換成列表
索引與切片
name_list = ['jason', 'tom', 123, 'abc']
# 索引取值
print(name_list[2]) # 輸出結果:123
print(name_list[-1]) # 輸出結果:abc
# 切片操作
print(name_list[1:3]) # 輸出結果:['tom', 123]
print(name_list[-4:-2]) # 輸出結果:['jason', 'tom']
# 切片操作之步長
print(name_list[::2]) # 輸出結果:['jason', 123]
print(name_list[3:1:-1]) # 輸出結果:['abc', 123]
統計列表長度
# len()用來統計長度
name_list = ['jason', 'tom', 123, 'abc']
print(len(name_list)) # 輸出結果:4
成員運算
# 成員運算
name_list = ['jason', 'tom', 123, 'abc']
print('j' in name_list) # 輸出結果:False
print('jason' in name_list) # 輸出結果:True
列表新增元素
# 尾部新增'單個'元素,append()
name_list = ['jason', 'tom']
name_list.append('tony')
print(name_list) # 輸出結果:['jason', 'tom', 'tony']
name_list.append([1, 2, 3])
print(name_list) # 輸出結果:['jason', 'tom', 'tony', [1, 2, 3]]
# 指定位置新增'單個'元素,insert()
name_list = ['jason', 'tom']
name_list.insert(1, 'tony')
print(name_list) # 輸出結果:['jason', 'tony', 'tom']
name_list.insert(1, [1, 2, 3])
print(name_list) # 輸出結果:['jason', [1, 2, 3], 'tony', 'tom']
# 合併列表,extend()
name_list = ['jason', 'tom']
name_list.extend([1, 2, 3])
print(name_list) # 輸出結果:['jason', 'tom', 1, 2, 3]
刪除元素
# del + 列表索引刪除指定索引的值
l = ['jason', 'tom', 'tony', 12]
del l[1]
print(l) # 輸出結果:['jason', 'tony', 12]
# remove()指名道姓刪除元素
l = ['jason', 'tom', 'tony', 12]
l.remove('tom')
print(l) # 輸出結果:['jason', 'tony', 12]
# pop()預設彈出尾部元素
l = ['jason', 'tom', 'tony', 12]
print(l.pop()) # 輸出結果:12
print(l) # 輸出結果:['jason', 'tom', 'tony']
# 或按索引彈出元素
l = ['jason', 'tom', 'tony', 12]
print(l.pop(2)) # 輸出結果:tony
print(l) # 輸出結果:['jason', 'tom', 12]
修改元素
# 直接按索引修改值
l = ['jason', 'tom', 'tony', 12]
l[1] = 'abc'
print(l) # 輸出結果:['jason', 'abc', 'tony', 12]
PS:修改列表內部元素時,列表的記憶體地址不會變,但是內部元素的記憶體地址會改變。
排序
# sort()可以用於列表排序,預設升序
l = [5, 4, 8, 3, 2, 9, 7]
l.sort()
print(l) # 輸出結果:[2, 3, 4, 5, 7, 8, 9]
l = [5, 4, 8, 3, 2, 9, 7]
l.sort(reverse=True)
print(l) # 輸出結果:[9, 8, 7, 5, 4, 3, 2]
列表翻轉
# reverse()可以用於列表的翻轉
l = [1, 2, 3, 4, 5]
l.reverse()
print(l) # 輸出結果:[5, 4, 3, 2, 1]
比較運算
# 兩個列表進行比較時,只會比較對應索引位置的元素
# 當列表長度和值都相等時,才會相等
l1 = [3, 2, 33]
l2 = [3, 2, 33]
print(l1 == l2) # 輸出結果:True
# 當列表第一個值不相等時,直接比較第一個值並輸出結果
l1 = [11, 2, 33, 4, 55]
l2 = [3, 2, 33]
print(l1 > l2) # 輸出結果:True
# 當列表第一個值相等時,比較下一個值,如果還相等,繼續下一個值,直到不同並輸出結果
l1 = [11, 2, 4, 4, 55]
l2 = [11, 2, 11, 6]
print(l1 > l2) # 輸出結果:False
# 當有兩個不同長度列表,短列表的值都與長列表相等,則長列表大
l1 = [11, 2, 4, 1]
l2 = [11, 2, 4]
print(l1 > l2) # 輸出結果:True
統計某個元素出現的次數
# 統計出現次數使用count()
l = [1, 2, 1, 5, 1, 4, 6, 7, 1]
print(l.count(1)) # 輸出結果:4
清空列表
# clear()
l = [1, 5, 'asd']
l.clear()
print(l) # 輸出結果:[]
拓展
可變與不可變型別
- 可變型別:值改變時,記憶體地址不變,如:列表
s = ['a', 'b', 'c']
print(id(s)) # 輸出結果:1419718185352
s[2] = 'd'
print(id(s)) # 輸出結果:1419718185352
圖解:
-
未修改列表內的值時:
-
修改後:
-
說明變數s的記憶體地址不會改變,會改變的只有內部索引,如s[2]的記憶體地址會改變
- 不可變型別:值改變時,記憶體地址改變,如:字串
s = 'abc'
print(id(s)) # 輸出結果:2236463808272
s = 'def'
print(id(s)) # 輸出結果:2236464953136
圖解:
-
未修改字串的值時:
-
修改後:
佇列與堆疊
- 佇列:簡單的說就是先進先出,如排隊用餐,先排隊先用餐
# 使用列表模擬出佇列
new_list = []
# 先進
new_list.append(111)
new_list.append(222)
new_list.append(333)
# 先出
print(new_list.pop(0))
print(new_list.pop(0))
print(new_list.pop(0))
'''
輸出結果:
111
222
333
'''
- 堆疊:簡單的說就是先進後出,如疊衣服,先疊好的衣服在最下層,要先從最上面取走衣服
# 使用列表模擬出堆疊
new_list = []
# 先進
new_list.append(111)
new_list.append(222)
new_list.append(333)
# 後出
print(new_list.pop())
print(new_list.pop())
print(new_list.pop())
'''
輸出結果:
333
222
111
'''
作業
- 將登入功能編寫成多使用者模式
- 利用列表編寫一個使用者註冊、登入程式
提示:迴圈
要求:成功一次即可 無需考慮使用者衝突等情況 - 不使用count統計列表中指定元素出現的次數