1. 程式人生 > 實用技巧 >我的python學習之路-基礎2

我的python學習之路-基礎2

本文內容:

  1. 流程控制
  2. 字串的格式化 format
  3. 列表、元組的操作
  4. 列表、元組的相關方法
  5. 字典的相關函式
  6. 集合相關的操作 

一、流程控制

    分為三種:1、 順序結構 2、分支結構 3、 迴圈結構

1、順序結構

  預設程式碼從上到下依次執行

2、分支結構

  1、單分支結構 

study_bug = "xx"
if study_bug == "xx":
    print("你的年薪最高")  

  2、雙分支結構

goodman = "xx"
if goodman == "xx":
    print("勤工儉學")
else:
    print("好吃懶做")    

  3、多分支結構  

 1 youqian = False
 2 youfang = False
 3 youche = False
 4 youyanzhi = True
 5 youtili = True
 6 
 7 if youqian == True:
 8     print("老孃要嫁給你1")
 9 elif youfang == True:
10     print("老孃要嫁給你2")
11 elif youche == True:
12     print("老孃要嫁給你3")
13 elif youyanzhi == True:
14     print("老孃要嫁給你4")
15 elif
youtili == True: 16 print("老孃要嫁給你5") 17 else: 18 print("你是個好人..")
View Code

  4、巢狀分支

單項分支,雙向分支,多項分支的互相巢狀的一種語法

 1 youqian = True
 2 youfang = True
 3 youche = False
 4 youyanzhi = True
 5 youtili = False
 6 
 7 if youqian == True:
 8     if youfang == True:
 9         if youche == True:
10
if youyanzhi == True: 11 if youtili == True: 12 print("別想跑了,老孃要定了...") 13 else: 14 print("上道邊,重金求子") 15 else: 16 print("請你去泰國整容...") 17 else: 18 print("你去買了布加迪威航") 19 else: 20 print("你是個好人 .. ")
View Code

3、 迴圈結構

特點: 減少冗餘程式碼,提升程式碼效率,while for 兩種迴圈、

1、while 迴圈

# 列印1 ~ 100
# 第一步
i = 1
# 第二步
while i <= 100:
    # 第四步
    print(i)
    
    # 第三步
    i += 1 # i = i + 1

2. for迴圈

  適用於 可迭代性資料(Iterable)(容器型別資料,range物件,迭代器)

# 遍歷字串
container = "王寅要加油"
# 遍歷列表
container = ["王生福","敬旭陽","熊海瑞","樑瑞卿"]
# 遍歷元組
container = ("王生福","敬旭陽","熊海瑞","樑瑞卿")
# 遍歷集合
container = {"王生福","敬旭陽","熊海瑞","樑瑞卿"}
# 遍歷字典 (遍歷資料時,預設遍歷的是字典的鍵)
container = {"wsf":"王生福","jxy":"敬旭陽","xhr":"小黃人"}

for i in container:
    print(i)
# 遍歷不等長的二級容器
container = [("楊特","白金鴿","郝建康"),["呂菲菲","王寅"],{"趙瀋陽"}]
for i in container:
    for j in i :
        print(j)
# 遍歷等長的二級容器,採用變數解包的方式
container = [("馬保國","馬戶","馬累"),["王健林","王思聰","王寅"],("馬雲","馬化騰","馬伊琍")]
for a,b,c in container:
    print(a,b,c)

2.1 range的三種用法物件 (留頭舍尾)

1.range( start , end , step )

  for i in range(1,10,3): # 1 4 7 print(i)

 2. range( start , end )

  for i in range(3,7): # 3 4 5 6 print(i)

 3.range(end) 從0開始,留頭舍尾

for i in range(3):print(i)

3、pass、break、continue 關鍵字的應用

1)、pass 用作來佔位

if 5 == 5:
    pass
    
while True:
    pass

2)、break 終止當前迴圈 (只能應用在迴圈之中)

i = 1
while i <= 10 :
    print(i)
    if i == 5 :
        break
    i += 1

3)、continue 跳過當前迴圈,從下一次迴圈開始 (只能應用在迴圈之中)

for i in range(1,11):
    if i == 5:
        continue
    print(i)

二、字串的格式化 format

1、順序傳參

1 strvar = "{}向{}開了一槍,飲蛋而亡".format("王寅","菲菲")
2 print(strvar) # 王寅向菲菲開了一槍,飲蛋而亡

2、索引傳參

1 strvar = "{1}向{0}開了一槍,飲蛋而亡".format("王寅","菲菲")
2 print(strvar) #菲菲向王寅開了一槍,飲蛋而亡

3、關鍵字傳參

strvar = "{who1}從後面掏了{who2}一下,回頭一記天馬流星拳".format(who1="王寅",who2="方進順")
print(strvar) #王寅從後面掏了方進順一下,回頭一記天馬流星拳

4、容器型別資料傳參

1 strvar = "{0[1]}親了{1[0]}一下,鼻血直冒三萬多尺".format(["王釗","郝建康"],("荷葉","王永捐"))
2 strvar = "{group2[1]}親了{group1[1]}一下,鼻血直冒三萬多尺".format(group1=["王釗","郝建康"],group2 = ("荷葉","王永捐"))
3 # group2[yj] 如果是字典在format格式化字串的使用中,不能加上引號""
4 strvar = "{group2[yj]}親了{group1[0]}一下,鼻血直冒三萬多尺".format(group1=["王釗","郝建康"],group2 = {"wz":"王兆","yj":"永捐"})
5 print(strvar)

5、format 填充符號的使用

^ :原字串居中
< :原字串居左
> :原字串居右

who:*^10
* :要填充的符號
^ :原字串居中
10: 填充的字串 +原字串

strvar="{who:*^7}在在{where:->6}坐著,看風景,感覺{feel:!<10}" .format(who="小明",where="陽臺",feel="高興")
strvar="{0:*^7}在在{1:->6}坐著,看風景,感覺{1:!<10}" .format("小明","陽臺","高興")
print(strvar) 
# **小明***在在----陽臺坐著,看風景,感覺陽臺!!!!!!!!

6、進位制轉換等特殊符號的使用(:d :s :f)

(1):d 整型佔位符:2d 佔三位

1 strvar= "小明買了{:<2d}個蘋果" .format(5)
2 print(strvar) #小明買了5 個蘋果 

(2):f 浮點型佔位符 (必須是浮點型) 預設小數點保留六位

1 strvar = "於盛林畢業了,一個月工資:{:f}".format(9.91234567)
2 # :.2f 小數點保留兩位 存在四捨五入
3 strvar = "於盛林畢業了,一個月工資:{:.2f}".format(9.91934567)
4 print(strvar) #於盛林畢業了,一個月工資:9.92

(3):s 字串佔位符 (必須是字串)

1 strvar = "{:s}".format("歡慶真胖~")
2 print(strvar) #歡慶真胖~

(4):, 金錢佔位符

1 strvar = "{:,}".format(12345678)
2 print(strvar) #12,345,678

三、列表、元組的操作

1.列表的拼接 (同元組)

lst1 = ["樑新宇","孟凡偉"]
lst2 = ["孫介面","王永捐"]
res = lst1 + lst2
print(res) #['樑新宇', '孟凡偉', '孫介面', '王永捐']

2.列表的重複(同元組)

lst1 = ["樑新宇","孟凡偉"]
res = lst1 * 3
print(res) #['樑新宇', '孟凡偉', '樑新宇', '孟凡偉', '樑新宇', '孟凡偉']

3、列表的切片(同元組)

 1 lst = ["曹培顯","歡慶","劉玉波","耿擇時","家營和","黃常見","劉靈鎮","孫翔宇"]
 2 # (1)[開始索引:]  從開始索引擷取到列表的最後
 3 res = lst[2:]
 4 print(res) #['劉玉波', '耿擇時', '家營和', '黃常見', '劉靈鎮', '孫翔宇']
 5 # (2)[:結束索引]  從開頭擷取到結束索引之前(結束索引-1)
 6 res = lst[:7]
 7 print(res) #['曹培顯', '歡慶', '劉玉波', '耿擇時', '家營和', '黃常見', '劉靈鎮']
 8 # (3)[開始索引:結束索引]  從開始索引擷取到結束索引之前(結束索引-1)
 9 res = lst[3:5]
10 print(res) #['耿擇時', '家營和']
11 # (4)[開始索引:結束索引:間隔值]  從開始索引擷取到結束索引之前按照指定的間隔擷取列表元素值
12 # 從左到右 正向擷取
13 res = lst[::3]
14 print(res) #['曹培顯', '耿擇時', '劉靈鎮']
15 # 從右向左 逆向擷取
16 res = lst[::-1]
17 print(res) #['孫翔宇', '劉靈鎮', '黃常見', '家營和', '耿擇時', '劉玉波', '歡慶', '曹培顯']
View Code

4、列表的獲取(同元組)

1 res = lst[1]
2 print(res) #歡慶

5、列表的修改( 可切片 )

1)、一次修改一個

1 lst=[1,2,3,4,5,6,7,8]
2 lst[0]="a"
3 print(lst) # ['a', 2, 3, 4, 5, 6, 7, 8]

2)、一次修改多個 ,等號右邊必須是Iterable(容器型別的資料 range物件 迭代器)

1 lst=[1,2,3,4,5,6,7,8]
2 lst[1:3]="abc"
3 print(lst) #1, 'a', 'b', 'c', 4, 5, 6, 7, 8]

3)、一次修改多個(帶步長) 擷取幾個,修改幾個

1 lst=[1,2,3,4,5,6,7,8]
2 lst[::3]=["a","b","c"]
3 print(lst) #['a', 2, 3, 'b', 5, 6, 'c', 8]

5、列表的刪除(可切片)

1)、 一次刪除一個

1 lst=[1,2,3,4,5,6,7,8]
2 del lst[0]
3 print(lst) #[2, 3, 4, 5, 6, 7, 8]

2)、一次刪除多個

lst=[1,2,3,4,5,6,7,8]
del lst[0:2]
print(lst) # [3, 4, 5, 6, 7, 8]

3)、注意點 (改寫法刪除的是res 變數,不是列表)

lst=[1,2,3,4,5,6,7,8]
res= lst[0:2]
del res
print(lst) #[1,2,3,4,5,6,7,8]

四、列表、元組的相關方法

1、增加

1、append向列表的末尾新增新的元素

lst = [1]
lst.append(2)
print(lst) # [1, 2]

2、insert 在指定索引之前插入元素

1 lst=[1,2]
2 lst.insert(0,3)
3 print(lst) #[3, 1, 2]

3、extend 迭代追加所有元素

必須是Iterable這樣的可迭代性資料(容器型別資料、range物件、迭代器)

1 lst1=[4,5]
2 lst1="abc"
3 lst.extend(lst1)
4 print(lst) #[3, 1, 2, 'a', 'b', 'c']

2、刪除

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

1 lst = [1,2,3,4,5,5]
2 lst.pop(2)
3 print(lst) # [1,2,4,5,5]

2.remove 通過給予的值來刪除,如果多個相同元素,預設刪除第一個

lst = [1,2,3,4,5,5]
lst.remove(5)
print(lst) #[1,2,3,4,5]

3.clear 清空列表

1 lst.clear()
2 print(lst) #[]

3、其他操作

1、index 獲取某個值在列表中的索引

1 lst = [1,2,3,4,5,5]
2 res = lst.index(5)
3 # res = lst.index(6) #不存在報錯
4 print(res) # 4

2、count 元素的數量

1 lst = [1,2,3,4,5,5]
2 res = lst.count(5)
3 print(res)  # 2

3、sort() 列表排序 (基於原有列表進行修改)

針對於數字:

1 # 正序
2 lst=[-1,-4,-6,45,1,100]
3 lst.sort()
4 print(lst) #[-6, -4, -1, 1, 45, 100]
5 #反向
6 lst=[-1,-4,-6,45,1,100]
7 lst.sort(reverse=True)
8 print(lst) #[100, 45, 1, -1, -4, -6]

針對於字母:

ascii 編碼進行排序 大小寫字母ascii相差32

按照ascii編碼的大小,一位一位的進行比較,預設從小到大

針對於中文:

能排序,無規律可循

4、reverse 列表反轉操作

1 lst=[1,2,3]
2 lst.reverse()
3 print(lst) #[3, 2, 1]

元組相關操作和方法

元組的相關操作除了不能修改和刪除其中的元素之外 , 剩下操作都和列表相同.
元組裡面能用的方法只有 index 和 count

五、字典的相關函式

1、增加

(1)使用鍵值來來增加

dic = {}
dic["top"] = "廉頗"
dic["middle"] = "妲己"
dic["bottom"] = "孫尚香"
print(dic) # {'top': '廉頗', 'middle': '妲己', 'bottom': '孫尚香'}

(2)fromkeys() 使用一組鍵和預設值建立字典 (快速定義字典)

1 lst = ["a","b",'c']
2 # fromkeys(塞滿鍵的容器,預設值)
3 dic = {}.fromkeys(lst,None)
4 print(dic) # {'a': None, 'b': None, 'c': None}

注意點 慎用

1 dic = {}.fromkeys(lst,[])
2 dic["a"].append(1)
3 print(dic) #{'a': [1], 'b': [1], 'c': [1]}

2、刪除

(1)pop()通過鍵去刪除鍵值對 (若沒有該鍵可設定預設值,預防報錯)

dic = {'top': '廉頗', 'middle': '妲己', 'bottom': '孫尚香',"jungle":"猴子","support":"小明"}
# 指定鍵刪除對應的鍵值對
res = dic.pop("jungle")
# 若沒有該鍵可設定預設值,預防報錯
res = dic.pop("middle123434","抱歉,該鍵不存在")
print(res)
print(dic)  #抱歉,該鍵不存在

(2)popitem() 刪除最後一個鍵值對

1 dic = {'top': '廉頗', 'middle': '妲己', 'bottom': '孫尚香',"jungle":"猴子","support":"小明"}
2 res = dic.popitem()
3 print(res) #('support', '小明')
4 print(dic) #{'top': '廉頗', 'middle': '妲己', 'bottom': '孫尚香', 'jungle': '猴子'}

(3)clear() 清空字典

1 dic.clear()
2 print(dic) #{}

3、改變

(1)update() 批量更新(有該鍵就更新,沒該鍵就新增

 1 dic =  {'top': '廉頗', 'middle': '妲己', 'bottom': '孫尚香'}
 2 
 3 # 沒該鍵就新增
 4 dic_new = {"support":""}
 5 dic.update(dic_new)
 6 print(dic) #{'top': '廉頗', 'middle': '妲己', 'bottom': '孫尚香', 'support': '瑤'}
 7 
 8 # 有該鍵就更新
 9 dic_new = {'middle': '武則天'}
10 dic.update(dic_new)
11 print(dic) #{'top': '廉頗', 'middle': '武則天', 'bottom': '孫尚香', 'support': '瑤'}

4、查詢

(1)get() 通過鍵獲取值(若沒有該鍵可設定預設值)

1 dic =  {'top': '廉頗', 'middle': '妲己', 'bottom': '孫尚香'}
2 # 沒有該鍵不報錯返回None
3 res = dic.get("top123")
4 res = dic.get("top123","抱歉,改鍵不存在")
5 # res = dic["top"]
6 print(res)

5、其他方法

(1)keys() 將字典的鍵組成新的可迭代物件

1 dic =  {'top': '廉頗', 'middle': '妲己', 'bottom': '孫尚香'}
2 res = dic.keys()
3 print(res , type(res))
4 #dict_keys(['top', 'middle', 'bottom']) <class 'dict_keys'>

(2)values() 將字典中的值組成新的可迭代物件

1 dic =  {'top': '廉頗', 'middle': '妲己', 'bottom': '孫尚香'}
2 res = dic.values()
3 print(res , type(res))
4 #dict_values(['廉頗', '妲己', '孫尚香']) <class 'dict_values'>

(3)items() 將字典的鍵值對湊成一個個元組,組成新的可迭代物件

1 dic =  {'top': '廉頗', 'middle': '妲己', 'bottom': '孫尚香'}
2 res = dic.items()
3 print(res , type(res))
4 #dict_items([('top', '廉頗'), ('middle', '妲己'), ('bottom', '孫尚香')]) <class 'dict_items'>
for k,v in dic.items():
    print(k,v)
'''
top 廉頗
middle 妲己
bottom 孫尚香
'''

六、集合相關的操作

1、交差並補

 1 set1 = {"郭傑瑞","藥水哥","張大仙","王文"}
 2 set2 = {"蔡徐坤","王力巨集","郭德綱","王文"}
 3 
 4 # 1.交集
 5 res = set1.intersection(set2)
 6 print(res) #{'王文'}
 7 
 8 # 簡寫 
 9 res = set1 & set2
10 print(res)
11 
12 # 2.差集
13 res = set1.difference(set2)
14 print(res) #{'郭傑瑞', '張大仙', '藥水哥'}
15 
16 # 簡寫 
17 res = set1 - set2
18 print(res) 
19 # 3.union 並集
20 res = set1.union(set2)
21 print(res)  #{'王文', '郭德綱', '張大仙', '王力巨集', '郭傑瑞', '蔡徐坤', '藥水哥'}
22 
23 # 簡寫 
24 res = set1 | set2
25 print(res) 
26 
27 # 4.symmetric_difference
28 res = set1.symmetric_difference(set2)
29 print(res) #{'郭德綱', '張大仙', '王力巨集', '郭傑瑞', '蔡徐坤', '藥水哥'}
30 
31 # 簡寫 
32 res = set1 ^ set2
33 print(res)

2、其他方法

(1)issubset() 判斷是否是子集

1 set1 = {"王文","王寶強","王健林","王思聰"}
2 set2 = {"王文","王寶強"}
3 res = set2.issubset(set1)
4 print(res)
5 # 簡寫
6 res = set2 < set1
7 print(res)

(2)issuperset() 判斷是否是父集

1 set1 = {"王文","王寶強","王健林","王思聰"}
2 set2 = {"王文","王寶強"}
3 res = set1.issuperset(set2)
4 print(res)
5 
6 # 簡寫
7 res = set1 > set2
8 print(res

(3)isdisjoint() 檢測兩集合是否不相交 不相交 True 相交False

1 set1 = {"王文","王寶強","王健林","王思聰"}
2 set2 = {"王文","王寶強"}
3 res = set1.isdisjoint(set2)
4 print(res) #False

3、增加

1.一次加一個

1 setvar = {"周潤發"}
2 setvar.add("周星馳")
3 setvar.add("周樹人")
4 print(setvar)

2.一次加一堆

update() 迭代著增加

1 setvar = {"馬諾"}
2 lst = "abc"
3 setvar.update(lst)
4 print(setvar) #{'c', 'a', '馬諾', 'b'}

4、刪除

(1)clear() 清空集合

1 setvar.clear()
2 print(setvar)

(2)pop() 隨機刪除集合中的一個數據

1 setvar = {'張大仙', '郭傑瑞', '藥水哥', '郭德綱', '蔡徐坤', '王力巨集'}
2 res = setvar.pop()
3 print(res)
4 print(setvar)

(3)remove() 刪除集合中指定的值(不存在則報錯) (瞭解)

1 setvar.remove("張大仙")
2 # setvar.remove("張大仙1233434343") error
3 print(setvar)

(4)discard() 刪除集合中指定的值(不存在的不刪除 推薦使用)

1 setvar.discard("郭傑瑞")
2 setvar.discard("郭傑瑞11122333")
3 print(setvar)

5、冰凍集合 (擴充套件)

冰凍集合一旦建立,不能在進行任何修改,只能做交差並補操作

frozenset 可強轉容器型別資料變為冰凍集合

1 lst = ["馬蓉","馬化騰","馬戶","馬雲","碼農"]
2 fz = frozenset(lst)
3 print(fz,type(fz)) #frozenset({'馬化騰', '碼農', '馬戶', '馬蓉', '馬雲'}) <class 'frozenset'>