python自定義函數,python-列表_字典_集合的相關函數_深拷貝和淺拷貝

 2023-11-30 阅读 37 评论 0

摘要:列表相關的函數 1.增 append 向列表的末尾添加新元素 lst = ["劉德華"] lst.append("周星馳") print(lst) insert 在指定索引之前插入元素 lst = ["劉德華","周星馳"] lst.insert(0,"吳孟達") lst.insert(2,"朱茵")

列表相關的函數

1.增

  1. append 向列表的末尾添加新元素

    lst = ["劉德華"]
    lst.append("周星馳")
    print(lst)
    
  2. insert 在指定索引之前插入元素

    lst = ["劉德華","周星馳"]
    lst.insert(0,"吳孟達")
    lst.insert(2,"朱茵")
    print(lst)
    
  3. python自定義函數,extend 迭代追加所有元素

    """要求: 數據的類型是可迭代性數據"""
    strvar = "1234"
    lst.extend(strvar)
    print(lst)
    

2.刪

  1. pop 通過指定索引刪除元素,若沒有索引移除最后那個

    lst = ["晏國彰","毛洪磊","劉子濤","劉聰","牧樹人"]
    # 指定索引進行刪除
    res = lst.pop(1)
    # 默認沒有任何參數,刪除的最后一個
    res = lst.pop()
    print(res)
    print(lst)
    
  2. remove 通過給予的值來刪除,如果多個相同元素,默認刪除第一個

    lst = ["晏國彰","毛洪磊","劉子濤","劉聰","牧樹人","劉子濤","劉子濤"]
    # 指定值進行刪除,如果有多個相同的重復值,默認刪掉第一個
    lst.remove("劉子濤")
    print(lst)
    
  3. python函數手冊?clear 清空列表

    lst = ["晏國彰","毛洪磊","劉子濤","劉聰","牧樹人","劉子濤","劉子濤"]
    lst.clear()
    print(lst)
    

3. 改差 => 參考: 列表的相關操作

4. 其他函數

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

    """列表.index(值,start,end)   [] 表達參數可選項 找不到報錯"""
    lst = ["晏國彰","毛洪磊","劉子濤","劉聰","牧樹人","劉子濤","劉子濤"]
    res = lst.index("劉子濤")
    res = lst.index("劉子濤",3)
    """res = lst.index("劉子濤",3,5) => error"""
    print(res)
    
  2. count 計算某個元素出現的次數

    lst = ["晏國彰","毛洪磊","劉子濤","劉聰","牧樹人","劉子濤","劉子濤"]
    res = lst.count("劉子濤")
    print(res)"""
    區別: 字符串里面的count可以劃定范圍,列表里面的count不行
    strvar = "asjksaaaf"
    print(strvar.count("a",1))
    """
    
  3. python內置函數,sort 列表排序 (默認從小到大排序)

    lst = [99,44,66,1,10,3,-57,-88]
    lst.sort()
    print(lst)# 從大到小排序
    lst.sort(reverse=True)
    print(lst)# 排序英文 (ASCII 編碼)
    """一位一位進行比較,在第一位相同的情況下,比較第二位,以此類推"""
    lst = ["tom","jack","lucy","bob"]
    lst.sort()
    print(lst)# 可以對中文進行排序(無規律可循)
    lst = ["王文","劉德華","周星馳","周潤發"]
    lst.sort()
    print(lst)
    
  4. reverse 列表反轉操作

    lst = ["王文","劉德華","周星馳","周潤發"]
    lst.reverse()
    print(lst)
    

5. 淺拷貝 和 深拷貝

a = 15
b = a
a = 16
print(b)lst1 = [1,2,3]
lst2 = lst1
lst1.append(4)
print(lst2)
  1. 淺拷貝

    import copy
    lst1 = [1,2,3]# 方法一 copy.copy() 模塊.方法
    lst2 = copy.copy(lst1)
    lst1.append(4)
    print(lst1)
    print(lst2)# 方法二 列表.copy()
    lst1 = [1,2,3,4]
    lst2 = lst1.copy()
    lst1.insert(0,0)
    print(lst1)
    print(lst2)
    
  2. python sort函數。深拷貝

    """
    lst1 = [1,2,3,[4,5,6]]
    lst2 = copy.copy(lst1)
    lst1[-1].append(7)
    lst1.append(100)
    print(lst1)
    print(lst2)
    """lst1 = [1,2,3,[4,5,6]]
    lst2 = copy.deepcopy(lst1)
    lst1[-1].extend("abc")
    print(lst1)
    print(lst2)print(id(lst2[-1]))
    print(id(lst1[-1]))print(id(lst1[0]))
    print(id(lst2[0]))lst2[0] = 1111
    print(id(lst1[0]))
    print(id(lst2[0]))
    
  3. 總結

    淺拷貝只拷貝一級容器中的所有數據

    深拷貝拷貝所有層級的所有元素

    淺拷貝速度比深拷貝速度快

    深拷貝在執行是: 如果是不可變數據,地址會暫時的指向原來數據

    ? 如果是可變數據,直接開辟新空間

    不可變數據: Number str tuple

    可變數據 : list set dict

字典相關的函數

1. 增

dic = {}
dic["ww"] = "英俊瀟灑,一表人才,文武雙全"
dic["xm"] = "干游戲,吃泡面,不洗澡"
dic["hh"] = "可愛,漂亮,大方,溫柔"
print(dic)"""fromkeys() 使用一組鍵和默認值創建字典"""lst = ["ww","xm","hh"]
dic = {}.fromkeys(lst,None)
print(dic)"""
注意點: 三個鍵所指向的列表是同一個(不推薦)dic = {}.fromkeys(lst,[])
print(dic)
dic["ww"].append(1)
print(dic)dic["ww"] = [1]
dic["xm"] = [1]
dic["hh"] = [1]
"""

2. 刪

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

    dic = {"top":"花木蘭" , "middle":"甄姬" , "bottom":"孫尚香" ,  "jungle" : "鐘馗" , "support":"蔡文姬" }
    res = dic.pop("top")# 如果刪除的是不存在的鍵,直接報錯
    # res = dic.pop("top123")# 可以設置默認值,預防報錯
    res = dic.pop("top123","沒有這個鍵")
    res = dic.pop("middle","沒有這個鍵")
    print(res,dic)
    
  2. popitem() 刪除最后一個鍵值對

    dic = {"top":"花木蘭" , "middle":"甄姬" , "bottom":"孫尚香" ,  "jungle" : "鐘馗" , "support":"蔡文姬" }
    res = dic.popitem()
    print(res,dic)
    
  3. clear() 清空字典

    dic = {"top":"花木蘭" , "middle":"甄姬" , "bottom":"孫尚香" ,  "jungle" : "鐘馗" , "support":"蔡文姬" }
    dic.clear()
    print(dic)
    

3. 改

  1. update() 批量更新(有該鍵就更新,沒有就添加)

    dic = {'ww': '一表人才,除了帥氣的皮囊之外,一無所有', 'ywz': '渣男', 'hxl': '摳腳老漢'}
    dic_new = {"ywz":"暖男","hxl":"扣手","ly":"小美女,單純,可愛,活潑,靈巧...."}# 方法一(推薦)
    dic.update(dic_new)
    print(dic)# 方法二
    dic.update(kxq="聰明,活潑,可愛,靈巧,惹人喜歡",ccg="樂觀,大方,可愛,靈巧")
    print(dic)
    

4. 查

  1. get() 通過鍵獲取值 (若沒有該鍵可設置默認值,預防報錯)

    dic = {'ww': '一表人才,除了帥氣的皮囊之外,一無所有', 'ywz': '渣男', 'hxl': '摳腳老漢'}
    res = dic.get("ww")
    res = dic.get("asvdf") # None
    res = dic.get("asvdf","沒有這個鍵")
    # res = dic["abcdef"] error
    print(res)
    

5. 重點掌握

  1. keys() 將字典的鍵組成新的可迭代對象

    dic = {'ww': '一表人才,除了帥氣的皮囊之外,一無所有', 'ywz': '渣男', 'hxl': '摳腳老漢'}
    res = dic.keys()
    print(res)
    
  2. values() 將字典中的值組成新的可迭代對象

    dic = {'ww': '一表人才,除了帥氣的皮囊之外,一無所有', 'ywz': '渣男', 'hxl': '摳腳老漢'}
    res = dic.values()
    print(res)
    
  3. items() 將字典的鍵值對湊成一個個元組,組成新的可迭代對象

    dic = {'ww': '一表人才,除了帥氣的皮囊之外,一無所有', 'ywz': '渣男', 'hxl': '摳腳老漢'}
    res = dic.items()
    print(res)
    

集合

1. 集合的相關操作

set1 = {"jacklove","theshy","rookie","xboyww"}
set2 = {"倪萍","張國榮","趙本山","劉能","趙四","xboyww"}# intersection() 交集
res = set1.intersection(set2)
print(res)
# 簡寫 &
res = set1 & set2
print(res)# difference() 差集
res = set1.difference(set2)
print(res)
# 簡寫 -
res = set1 - set2
print(res)# union() 并集
res = set1.union(set2)
print(res)
# 簡寫 |
res = set1 | set2
print(res)# symmetric_difference() 對稱差集 (補集情況涵蓋在其中)
res = set1.symmetric_difference(set2)
print(res)
# 簡寫 ^
res = set1 ^ set2
print(res)set1 = {"周星馳","劉德華","成龍","張學友"}
set2 = {"周星馳","劉德華"}# issubset() 判斷是否是子集
res = set1.issubset(set2)
print(res)
# 簡寫 <
res = set1 < set2
print(res)# issuperset() 判斷是否是父集
res = set1.issuperset(set2)
print(res)
# 簡寫 >
res = set1 > set2
print(res)# isdisjoint() 檢測兩集合是否不相交 不相交 True 相交 False
res = set1.isdisjoint(set2)
print(res)

2. 集合相關的函數

1. 增

  1. add() 向集合中添加數據 (一次加一個)

    setvar = {"神秘男孩","金角大王"}
    setvar.add("銀角大王")
    print(setvar)
    
  2. update() 向集合中迭代增加數據 (一次加一堆)

    setvar = {"神秘男孩","金角大王"}
    strvar = ("小明","小紅")
    setvar.update(strvar)
    print(setvar)
    

2. 刪

  1. clear() 清空集合

    setvar = {"神秘男孩","金角大王","銀角大王"}
    setvar.clear()
    print(setvar)
    
  2. pop() 隨機刪除集合中的一個數據

    setvar = {"神秘男孩","金角大王","銀角大王"}
    res = setvar.pop()
    print(res)
    
  3. remove() 刪除集合中指定的值 (不存在則報錯) => 了解即可

    setvar = {"神秘男孩","金角大王","銀角大王"}
    setvar.remove("神秘男孩")
    print(setvar)
    
  4. discard() 刪除集合中指定的值 (不存在的不刪除) => 推薦使用

    setvar = {"神秘男孩","金角大王","銀角大王"}
    setvar.discard("神秘男孩")
    setvar.discard("神秘男孩666")
    print(setvar)
    

3. 冰凍集合

  1. frozenset 可強轉容器類型數據變為冰凍集合

  2. 冰凍集合一旦創建,不能進行任何修改,只能做交叉并補操作

    lst1 = ["王聞",18,"男性","愛好:跑步"]
    fz1 = frozenset(lst1)lst2 = ("王聞","地址:包頭","買一輛特斯拉9.9包郵")
    fz2 = frozenset(lst2)print(fz1,type(fz1))
    print(fz2,type(fz2))# 不能夠在冰凍集合當中添加或者刪除元素
    # fz1.add(123) error
    # 只能交叉并補print( fz1 & fz2 )
    print( fz1 - fz2 )
    

練習

練習1

li = ["alex", "WuSir", "xboy", "oldboy"]
  1. 列表中追加元素"seven",并輸出添加后的列表

    li = ["alex", "WuSir", "xboy", "oldboy"]
    li.append("seven")
    print(li)
    
  2. 請在列表的第1個位置插入元素"Tony",并輸出添加后的列表

    li = ["alex", "WuSir", "xboy", "oldboy"]
    li.insert(0,"Tony")
    print(li)
    
  3. 請修改列表第2個位置的元素為"Kelly",并輸出修改后的列表

    li = ["alex", "WuSir", "xboy", "oldboy"]
    li[1] = "Kelly"
    print(li)
    
  4. 請將列表l2=[1,“a”,3,4,“heart”]的每一個元素添加到列表li中,一行代碼實現,不允許循環添加。

    li = ["alex", "WuSir", "xboy", "oldboy"]
    l2=[1,"a",3,4,"heart"]
    li.extend(l2)
    print(li)print(li + l2)
    
  5. 請將字符串s = "qwert"的每一個元素添加到列表li中,一行代碼實現,不允許循環添加。

    li = ["alex", "WuSir", "xboy", "oldboy"]
    s = "qwert"
    li.extend(s)
    print(li)
    
  6. 請刪除列表中的元素"alex",并輸出刪除后的列表

    li = ["alex", "WuSir", "xboy", "oldboy"]
    li.remove["alex"]
    print(li)
    
  7. 請刪除列表請刪除列表中的第2至4個元素,并輸出刪除元素后的列表

    li = ["alex", "WuSir", "xboy", "oldboy"]
    del li[1:]
    del li[1:4]
    print(li)
    
  8. 刪除列表中的第2個元素,并輸出刪除的元素和刪除元素后的列表

    li = ["alex", "WuSir", "xboy", "oldboy"]
    res = li.pop(1)
    print(res)
    print(li)
    
  9. 請將列表所有得元素反轉,并輸出反轉后的列表

    li = ["alex", "WuSir", "xboy", "oldboy"]
    li.reverse()
    print(li)
    
  10. 請計算出"alex"元素在列表li中出現的次數,并輸出該次數。

li = ["alex", "WuSir", "xboy", "oldboy"]
res = li.count("alex")
print(res)

練習2

寫代碼,有如下列表,利用切片實現每一個功能

li = [1, 3, 2, “a”, 4, “b”, 5,“c”]

  1. 通過對li列表的切片形成新的列表l1,l1 = [1,3,2]

    li = [1, 3, 2, "a", 4, "b", 5,"c"]
    print(list(li[:3]))
    
  2. 通過對li列表的切片形成新的列表l2,l2 = [“a”,4,“b”]

    li = [1, 3, 2, "a", 4, "b", 5,"c"]
    print(list(li[3:6]))
    
  3. 通過對li列表的切片形成新的列表l3,l3 = [1,2,4,5]

    li = [1, 3, 2, "a", 4, "b", 5,"c"]
    print(list(li[::2]))
    
  4. 通過對li列表的切片形成新的列表l4,l4 = [3,“a”,“b”]

    li = [1, 3, 2, "a", 4, "b", 5,"c"]
    print(li[1:6:2])
    print(list(li[1:-2:2]))
    
  5. 通過對li列表的切片形成新的列表l5,l5 = [“c”]

    li = [1, 3, 2, "a", 4, "b", 5,"c"]
    print(list(li[-1]))
    
  6. 通過對li列表的切片形成新的列表l6,l6 = [“b”,“a”,3]

    li = [1, 3, 2, "a", 4, "b", 5,"c"]
    print(list(li[-3:0:-2]))
    

練習3

寫代碼,有如下列表,按照要求實現每一個功能。

lis = [2, 7, “k”, [“qwe”, 20, [“k1”, [“tt”, 3, “1”]], 89], “ab”, “adv”]

  1. 將列表lis中的"tt"變成大寫

    lis = [2, 7, "k", ["qwe", 20, ["k1", ["tt", 3, "1"]], 89], "ab", "adv"]
    print(lis[3][2][1][0].upper())
    
  2. 將列表中的數字3變成字符串"100"

    lis = [2, 7, "k", ["qwe", 20, ["k1", ["tt", 3, "1"]], 89], "ab", "adv"]
    lis[3][2][1][1] = "100"
    print(lis)
    
  3. 將列表中的字符串"1"變成數字101

    lis = [2, 3, "k", ["qwe", 20, ["k1", ["tt", 3, "1"]], 89], "ab", "adv"]
    lis[3][2][1][-1] = 101
    print(lis)
    

練習4

li = [“alex”, “eric”, “rain”]

利用下劃線將列表的每一個元素拼接成字符串"alex_eric_rain"

li = ["alex", "eric", "rain"]   
res = "_".join(li)
print(res)

練習5

利用for循環打印出下面列表的索引

li = ["alex", "WuSir", "xboy", "oldboy"]
for i in li:print(li.index(i))

練習6

利用for循環和range 找出50以內能被3整除的數,并將這些數插入到一個新列表中。

lst = []
for i in range(51):if i % 3 == 0:lst.append(i)
print(lst)        

練習7

利用for循環和range從100~10,倒序將所有的偶數添加到一個新列表中,然后對列表的元素進行篩選,將能被4整除的數留下來

lst = []
for i in range(100,9,-2):if i % 4 == 0:lst.append(i)
print(lst)          

練習8

查找列表li中的元素,移除每個元素的空格,并找出以"A"或者"a"開頭,并以"c"結尾的所有元素,并添加到一個新列表中,最后循環打印這個新列表。

li = ["xboy ", "alexC", "AbC ", " egon  ", " riTiAn  ", "WuSir", "  aqc"]
lst_new = []
for i in li:res = i.strip()if (res.startswith("A") or res.startswith("a")) and res.endswith("c"):lst_new.append(res)
print(lst_new)        

練習9

敏感詞列表 li = [“蒼老師”, “東京熱”, “武藤蘭”, “波多野結衣”]

將用戶輸入的內容中的敏感詞匯替換成等長度的*(蒼老師就替換***),并添加到一個列表中;如果用戶輸入的內容沒有敏感詞匯,則直接添加到新列表中。

li = ["蒼老師", "東京熱", "武藤蘭", "波多野結衣"]
lst = []
while True:strvar = input("請輸入名字")# 如果按 q 直接退出if strvar.upper() == "Q":print(lst)break# 循環遍歷替換敏感詞for i in li:if i in strvar:strvar = strvar.replace(i,"*" * len(i))# 把所有過濾好的數據存放新的列表lst.append(strvar)  

練習10

li = [1, 3, 4, “alex”, [3, 7, “23aa”,8, “xboy”], 5,(‘a’,‘b’)]

循環打印列表中的每個元素,并轉化為小寫,遇到列表則再循環打印出它里面的元素。

li = [1, 3, 4, "alex", [3, 7, "23aa",8, "xboy"], 5,('a','b')]
for i in li:# 判斷類型是不是字符串if isinstance(i,str):print(i.lower())# 判斷類型是列表或者元組elif isinstance(i,(list,tuple)):for j in i:# 判斷是不是字符串類型if isinstance(j,str):print(j.lower())else:# 否則原型化打印print(j)else:print(i)

練習11

tu = ("alex", [11, 22, {"k1": 'v1', "k2": ["age", "name"], "k3": (11,22,33)}, 44])
  1. 講述元組的特性

    可獲取,不可修改,有序

  2. 請問tu變量中的第一個元素 “alex” 是否可被修改?

    不可以

  3. 請問tu變量中的"k2"對應的值是什么類型?是否可以被修改?如果可以,請在其中添加一個元素 "seven"

    列表 可以修改

    tu[-1][2]["k2"].append("seven")
    
  4. 請問tu變量中的"k3"對應的值是什么類型?是否可以被修改?如果可以,請在其中添加一個元素 "Seven"

    元組 不可修改

練習12

把字符串 “k:1|k1:2|k2:3|k3:4” 處理成字典 {‘k’:1,‘k1’:2…}

strvar = "k:1|k1:2|k2:3|k3:4"
dic = {}
lst = strvar.split("|")
print(lst) # ['k:1','k1:2','k2:3','k3:4']
for i in lst:k,v = i.split(":")dic[k] = v
print(dic) # {'k':'1','k1':'2','k2':'3','k3':'4'}     

練習13

有如下值li= [11,22,33,44,55,66,77,88,99,90],

將大于 66 的值保存至字典的k1鍵中,

將小于 66 的值保存至字典的k2鍵中。

即: {‘k1’: 大于66的所有值列表, ‘k2’: 小于66的所有值列表}

li= [11,22,33,44,55,66,77,88,99,90]
dic = {"k1":[],"k2":[]}
for i in li:if i > 66:dic["k1"].append(i)elif i < 66:   dic["k2"].append(i)
print(dic)        

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://808629.com/188238.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 86后生记录生活 Inc. 保留所有权利。

底部版权信息