第三章 資料型別相關功能

柠檬の夏天發表於2024-04-29

1.字串相關功能

1.1 跳脫字元

"""
# 跳脫字元 \ + 字元
(1)可以將無意義的字元變的有意義
(2)可以將有意義的字元變的無意義

\n   :換行
\r\n  :換行
\t    :縮排(水平製表符)
\r    :將\後面的字串拉到了當前行的行首
"""
#(1)可以將無意義的字元變得有意義
strvar = "還有詩和\n遠方的田野"
strvar = "還有詩和\r\n遠方的田野"
strvar = "還有詩和\t遠方的田野"
strvar = "還有詩和\n遠方的田野"
strvar = "還有詩和\n遠方的\r田野"

#(2)可以將有意義的字元變得無意義
strvar = "還有詩和\"遠\"方的田野"

1.2 原型化輸出字串

strvar = "D:\ntmp\code\tday03"
strvar = r"D:\ntmp\code\tday03"
print(strvar) # D:\ntmp\code\tday03

1.3 字串格式化

"""
一、
%d 整型佔位符
%f 浮點型佔位符
%s 字串佔位符
語法形式:"字串" %(值1,值2)
"""

# %d 整型佔位符
strvar = "小明昨天買了%d瓶風油精,洗澡" %(2)

# %2d 佔倆位(不夠兩位拿空格來補位)原字串居右
strvar = "小明昨天買了%2d瓶風油精,洗澡" %(2)

# %-2d 佔倆位(不夠兩位拿空格來補位)原字串居左
strvar = "小明昨天買了%-2d瓶風油精,洗澡" %(2)

# %f浮點型佔位符(預設保留小數點後面六位小數)
strvar = "小明一個月開%f工資" %(9.9)

# %.2f 保留小數點後面倆位小數(存在四捨五入的情況)
strvar = "小明一個月開%.2f工資" %(9.9)

# %s 字串佔位符
strvar = "%s最喜歡在電影院尿尿" %(小明)


"""
二、{}是format中的佔位符
"""
# (1)順序傳參
strvar = "{}向{}開了一槍,飲彈而亡".format("喜洋洋", "沸羊羊")
print(strvar)

# (2)索引傳參
strvar = "{1}向{0}開了一槍,飲彈而亡".format("喜洋洋", "沸羊羊")
print(strvar)

# (3)關鍵字傳參
strvar = "{a}向{b}開了一槍,飲彈而亡".format(a="喜洋洋", b="沸羊羊")
strvar = "{a}向{b}開了一槍,飲彈而亡".format(a="沸羊羊", b="喜洋洋")
print(strvar)

# (4)容器型別資料(列表或元祖)傳參

# 方法一
strvar = "{0[0]}摸了{1[1]}一下,嘿嘿一笑,有戲".format(["喜洋洋", "沸羊羊", "懶洋洋"], ("灰太狼", "焦太狼"))
print(strvar)


# 方法二(推薦)
strvar = "{group1[0]}摸了{group2[1]}一下,嘿嘿一笑,有戲".format(group1=["喜洋洋", "沸羊羊", "懶洋洋"],group2=("灰太狼", "焦太狼"))


# 方法二(推薦)注意:如果該容器是字典,透過鍵取值時,不需要加引號  注意二:透過下標取值時,不能使用負號(逆向索引)
strvar = "{group1[b]}摸了{group2[0]}一下,嘿嘿一笑,有戲".format(group1={"a":"喜洋洋", "b":"沸羊羊"},group2=("灰太狼", "焦太狼"))
print(strvar)


# (5)format的填充符號的使用(^><)
"""
^ 原字串居中顯示
> 原字串居右顯示
< 原字串居左顯示

{who:*^10}
*:填充的符號
^:原字串居中顯示
11:原字串長度 + 填充符號的長度 = 11
"""

strvar = "{who:*^11}去長春生醫藥公司,{do:>>10}感覺{feel:!<10}".format(who="李亞峰",do="扎疫苗",feel="血槽被掏空")
print(strvar)


"""
三、進位制轉換等特殊符號的使用(:d:f:s:,)
"""
# :d 整型佔位符(強制要求型別是整形)
strvar = "昨天買了{:d}個花露水泡腳".format(9)
print(strvar)


# :3d 佔三位,不夠三位拿空格來補位(原字串居右)
strvar = "小明昨天晚上買了{:3d}個花露水泡腳".format(9)
print(strvar)

strvar = "小明昨天晚上買了{:<3d}個花露水泡腳".format(9)
print(strvar)

strvar = "小明昨天晚上買了{:^3d}個花露水泡腳".format(9)
print(strvar)


# :f浮點型佔位符(強制要求型別是整型)預設保留小數六位
strvar = "小明昨天晚上買了{:f}個花露水泡腳".format(9)
print(strvar)


# :.2f 小數點後保留2位,存在四捨五入
strvar = "小明昨天晚上買了{:f}個花露水泡腳".format(9.12345)
print(strvar)

# :s 字串佔位符
strvar = "{:s}".format("小明真帥")
print(strvar)

# :,金錢佔位符 從右向左用逗號三位一隔開)
strvar = "{:,}".format(12345678)
print(strvar)

# 綜合案例
strvar = "{:s}開工資{:.2f}元,買了{:d}個蘭博基尼".format("孫堅",3000000.12345,10)
print(strvar)



1.4 字串的相關操作

# (1)字串的拼接 +
str1 = "小明"
str2 = "小紅"

res = str1 + str2
res = "小明" + "小紅"

# res = res + "旁邊的同學很喜歡他"
res += "旁邊的同學很喜歡他"
print(res)


# (2)字串的重複 *
strvar = "重要的事情說三遍~"
res = strvar * 3
print(res)


# (3)字串跨行拼接 \
str1 = "asxaxsacascacacdffccccccccccssss"\
"12we1"
print(str1)


# (4)字串的索引
strvar = "小明真帥啊"
print(strvar[1])


# (5)字串的切片

"""
語法 => 字串[::] 完整格式:[開始索引:結束索引:間隔值]
    (1)[開始索引:] 從開始索引擷取到字串的最後
    (2)[:結束索引] 從開頭擷取到結束索引之前(結束索引-1)
    (3)[開始索引:結束索引]從開始索引到結束索引之前(結束索引-1)
    (4)[開始索引:結束索引:間隔值] 從開始索引擷取到結束索引之前按照的間隔擷取字元
    (5)[:]或[::] 擷取所有字串
"""

# (1)[開始索引:] 從開始索引擷取到字串的最後
strvar = "小明是這個宇宙當中,最完美,無暇,善良,英俊的神秘男孩"
res = strvar[3:]
print(res)


# (2)[:結束索引] 從開頭擷取到結束索引之前(結束索引-1)
"""4這個值本身獲取不到的,要獲取到4之前的那一個資料:取頭舍尾"""
res = strvar[:4]
print(res)


# (3)[開始索引:結束索引]從開始索引到結束索引之前(結束索引-1)
res = strvar[10:16]
print(res)


# (4)[開始索引:結束索引:間隔值] 從開始索引擷取到結束索引之前按照的間隔擷取字元
# 從左向右擷取
res = strvar[::3]
# 0 3 6 9 12 15 ...
print(res)


# 從右向左擷取
res = strvar[::-1]
# -1 -2 -3 -4 -5 -6 ...
print(res)


res = strvar[-3:-10:-2]
# -3 -5 -7 -9
print(res)

"""
從左到右截,間隔值為正值,反過來,間隔值是負值,才能保證擷取到資料
"""
res = strvar[-3:-10:10]#從右到左,間隔值方向反了,錯誤的邏輯
res = strvar[1:10:1] #預設步長為1
print(res)

1.5 字串的相關函式

# *capitalize 字串首字母大寫
strvar = "how are you"
res = strvar.capitalize()
print(res)

# *title 每個單詞首字母大寫
strvar = "how old are you"
res = strvar.title()
print(res)

# *upper 將所有字母變成大寫
strvar = "How old Are You"
res = strvar.upper()
print(res)

# *lower 將所有字母變成小寫
strvar = "How old Are You"
res = strvar.lower()
print(res)

# *swapcase 大小寫互換
strvar = "How old Are You"
res = strvar.swapcase()
print(res)

# *len 計算字串的長度
strvar = "Hello"
res = len(strvar)
print(res)

# *count 統計字串中某個元素的數量
# count(字元,開始值,結束值)
strvar = "真熱真熱呀"
res = strvar.count("真")  # 2
res = strvar.count("熱", 2)  # 1
res = strvar.count("熱", 2, 3)  # 只有真這個字元 沒有熱
print(res)

# find 查詢某個字串第一次出現的索引位置
# find (字元,[開始值,結束值])
strvar = "to be or not to be that is question"
res = strvar.find("to")
res = strvar.find("be", 4)

# 如果我們find返回的是-1代表沒找到
res = strvar.find("be", 4, 10)  # 4~9
print(res)

# *index與find功能相同find找不到返回-1,index找不到資料直接報錯
# res = strvar.index("be",4,10)
print(res)

# *startswith 判斷是否以某個字元或字串為開頭
# startswith(字元,[開始值,結束值])
# endswith(字元,[開始值,結束值])


strvar = "To be or not to be that is a question"
res = strvar.startswith("To")
res = strvar.startswith("To", 10)
print(res)

# *endswith 判斷是否以某個字元或字串結尾
res = strvar.endswith("question")
res = strvar.endswith("is", -14, -11)  # is
print(res)

# ### is系列
# *isupper 判斷字串是否都是大寫字母
strvar = "HOW A YOU"
res = strvar.isupper()
print(res)

# *is1ower 判斷字串是否都是小寫字母
strvar = "asdf - As"
res = strvar.islower()
print(res)

# *isdecima1 檢測字串是否以數字組成 必須是純數字
strvar = "123.133"
res = strvar.isdecimal()
print(res)


# *split 按某字母將字串分割成列表(預設字元是空格)
# strvar = "you can you up no can no bb"
strvar = "you#can#you#up#no#can#no#bb"
lst = strvar.split("#")
print(lst)

# *join 按某字元將列表拼接成字串(容器型別都可)
lst = ['you', 'can', 'you', 'up', 'no', 'can', 'no', 'bb']
strvar = " ".join(lst)
strvar = "#".join(lst)
print(strvar)

# *replace 把字串的舊字元換成新字元
# 字串.replace('舊字元','新字元'[,限制替換的次數])
strvar = "范冰冰愛不愛我,愛我,不愛我,愛我,不愛我"
res  = strvar.replace("不愛我","愛我")
# 選擇替換的次數
res = strvar.replace("不愛我","愛我",1)
print(res)


# *strip 預設去掉首尾兩邊的空白符
# 空白符 空格 \n \t \r ...
# rstrip 去掉右邊某個字元
# lstrip 去掉左邊某個字元
strvar = "   周潤發  "
res = strvar.strip()
print(strvar)
print(res)


# *center 填充字串,原字串居中(預設填充空格)
# center(字串長度,填充符號)
strvar = "小明"
res = strvar.center(10)
# res = strvar.center(10,"*")
print(res)

2.列表相關功能

2.1 列表的相關操作

lst1 = ["孟凡偉","小明"]
lst2 = ["小強","小紅"]

# (1)列表的拼接    (同元組)
res = lst1 + lst2
print(res)

# (2)列表的重複    (同元組)
res = lst1 * 3
print(res)

# (3)列表的切片    (同元組)
"""
語法 =>列表[::]     完整格式:[開始索引:結束索引:間隔值]
    (1)[開始索引:]  從開始索引擷取到列表的最後
    (2)[:結束索引]  從開頭載取到結束索引之前(結束索引-1)
    (3)[開始索引:結束索引] 從開始索引擷取到結束索引之前(結末索引-1)
    (4)[開始索引:結束索引:間隔值] 從開始索引擷取到結束索引之前按照指定的間隔擷取列表元素值
    (5)[:]或[::] 擷取所有列表

"""
# (1)[開始索引:]  從開始索引擷取到列表的最後
lst = ['孟凡偉', '小明', '小強', '小紅',"小光","小藍"]
res = lst[2:]
print(res)


# (2)[:結束索引]  從開頭載取到結束索引之前(結末索引-1)
res = lst[:3]
print(res)

# (3)[開始索引:結束索引] 從開始索引擷取到結束索引之前(結束索引-1)
res = lst[3:5]
print(res)

# (4)[開始索引:結束索引:間隔值] 從開始索引擷取到結束索引之前按照指定的間隔擷取列表元素值
# 正向擷取
res = lst[::5]
print(res) # 0 5 10

# 逆向擷取
res = lst[::-3] # -1 -4 -7
print(res)


# (5)[:]或[::] 擷取所有列表
res = lst[:]
res = lst[::]
print(res)


# (4)列表的獲取  (同元組)
lst = [10,20,30]
print(lst[-1])


# (5)列表的修改  (可切片)
lst = ['孟凡偉', '小明', '小強', '小紅',"小光","小藍","alex"]

# 改單個值
lst[-1] = "Amy"
print(lst)


# 1.改多個值(如果使用切片進行修改,要求資料必須是Iterable可迭代性資料)
lst[1:4] = ["孫悟空","豬八戒","白骨精"]
lst[1:4] = "你好"
print(lst)


# 2.改多個值(帶有步長)
"""帶有步長的切片修改,切出幾個元素就修改幾個元素,數量要一致"""
lst = ['孟凡偉', '小明', '小強', '小紅',"小光","小藍","alex"]
""" 0 3 6"""
# lst[::3] = "abc"
# lst[::3] = "ab" #error 報錯
print(lst)


# (6)列表的刪除  (可切片)
lst = ['孟凡偉', '小明', '小強', '小紅',"小光","小藍","alex"]
# 1.一次刪一個
# del lst[2]
print(lst)

# 2.一次刪一堆
del lst[1:-1]
print(lst)


# 3.注意點
res = lst[1:-1]
# del res # 刪除的是res這個變數和列表無關
print(res)


# 額外的注意點 裡面是列表可以修改
tup = (1,2,3,4,[10,11,12])
print(tup[-1])
tup[-1][-1] = 13
print(tup)

2.2 列表的相關函式

# 增
# append 向列表的末尾新增新的元素
lst = ["小明"]
lst.append("小紅")
print(lst)


# insert 在指定索引之前插入元素
lst = ["小綠,小黃"]
lst.insert(1,"小紫")
print(lst)


# extend 迭代追加所有元素
"""迭代追加的資料是可迭代性資料(容器型別資料,range物件,迭代器)"""
lst = ["alex","Amy"]
tup = (1,2,3)
lst.extend(tup)


strvar = "abc"
lst.extend(strvar)
print(strvar)


# 刪
# 1.pop 透過指定索引刪除元素,若沒有索引移除最後那個(推薦)

lst =["曹靜怡","王志國","鄧鵬","合理"]
#不指定下標,預設刪除最後一個
res = lst.pop()
print(res)
print(lst)


#指定下標,刪除具體某個元素
res = lst.pop(1)
print (res)
print(lst)


# 2.remove 透過給子的值來刪除,如果多個相同元素,預設刪除第一個
lst =["曹靜怡","王志國","合理","鄧鵬","合理"]
res = lst.remove("合理")
print(res)
print(lst)


# 3.clear 清空列表
lst =["曹靜怡","王志國","合理","鄧鵬","合理"]
lst.clear()
print(lst)



# 列表的其他相關函式
# index 獲取某個值在列表中的索引
lst = ["曹靜怡","王志國","合理","鄧鵬","合理","鄧鵬輝","鄧鵬藍","合理","鄧鵬綠"]
res = lst.index("合理")
res = lst.index("合理",3)
res = lst.index("合理":3.6) #345
# res = lst.index"合理大”)error
print(res)


# count 計算某個元素出現的次數
res = lst.count("合理") # 沒有範圍的概念
print(res)



# sort 對列表排序
lst=[-90,-100,-1,90,78]
# 從小到大進行排序
lst.sort()
# 從大到小進行排序
lst.sort(reverse-True)
print(lst)


# 對字串進行排序(按照ascii編碼)
lst =["kobi","james","jordon" ,"yaoming","yi"]
lst.sort()
print(lst)


# 是否可以對中文排序(瞭解 無規律可循)
lst = ["王文","蔡徐坤"]
lst.sort()
print(lst)


# reverse 列表反轉操作
lst =[1,2,"a","蔡徐坤","易烊千璽"]
lst.reverse()
print(lst)

相關文章