1. 程式人生 > 其它 >python之資料型別的內建方法(str, list)

python之資料型別的內建方法(str, list)

目錄

字串的內建方法

上一個部落格中我講了基礎的的字串內建方法,在這裡我將講訴字串中其他的內建方法。

移除首尾指定字元

# 在字串型別中,我們可以使用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

圖解:

  1. 未修改列表內的值時:

  2. 修改後:

  3. 說明變數s的記憶體地址不會改變,會改變的只有內部索引,如s[2]的記憶體地址會改變

  • 不可變型別:值改變時,記憶體地址改變,如:字串
s = 'abc'
print(id(s))  # 輸出結果:2236463808272
s = 'def'
print(id(s))  # 輸出結果:2236464953136

圖解:

  1. 未修改字串的值時:

  2. 修改後:

佇列與堆疊

  • 佇列:簡單的說就是先進先出,如排隊用餐,先排隊先用餐
# 使用列表模擬出佇列
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
'''

作業

  1. 將登入功能編寫成多使用者模式
  2. 利用列表編寫一個使用者註冊、登入程式
    提示:迴圈
    要求:成功一次即可 無需考慮使用者衝突等情況
  3. 不使用count統計列表中指定元素出現的次數

答案