Python基礎六(day06)
(本文僅作為學習記錄使用) 感謝太白老師和王sir的諄諄教導.
01 昨日內容回顧
昨日主要講解的是字典。
字典考察字典的增刪改查和其他操作。
字典的增加(2種)
1.直接改,按照key改. dic[key] = value. 有則修改,無則增加.
2.setdefault. dic.setdefault[key,value] 有則不改,無則添加.
注意,key是唯一的,value是任意的. key必須有,value可以沒. value沒的話就是none,可以視為set. set是特殊的字典.
字典的刪除(4種)
1.pop. 按key刪除. dic.pop(key)
2.clear . 清空字典. dic.clear()
3.popitem . 刪除最後一個.(Python 3.6以後) dic.popitem()
4.del. 可以按鍵刪除. 也可以刪除dic. del dic , del dic[key]
字典的改(2種)
1.直接改.dic[key] = value. 有則修改,無則增加.
2.update. dic.update(key=value) dic.update(dic2)
注意,update既可直接修改(用等號,key不用引號),也可直接把一個字典改進去. 而dic.setdefault後面的是逗號.
字典的查(2種)
1.直接查 . 找到dic的key . print(dic[key]) . 如此.
2.用get. dic.get[key] 獲取key對應的value.
其他操作:
1.對key操作的手段很少,只有2種.
1.通過for循環遍歷.
demo1: d = {k1:v1,k2:v2,k3:v3} for i in d : print(i) 結果:輸出key.這個是單個單個的字元串輸出.
2.通過list.
demo2:
d = {k1:v1,k2:v2,k3:v3}l = list(d)print(l)
結果:輸出key.這個是輸出的列表.其他,dic.keys() 輸出所有key(列表中的元素是字元串)
dic.values() 輸出所有value(列表中的元素是字元串)
dic.items() 輸出所有key和value(列表中的元素是元組)
鏈接:https://www.cnblogs.com/smithpath/articles/10486405.html
02 作業講解
# 1.有如下變數(tu是個元祖),請實現要求的功能 # tu = ("alex", [11, 22, {"k1": v1, "k2": ["age", "name"], "k3": (11, 22, 33)}, 44]) # a.講述元祖的特性 # 元組通常上來說不可變,格式是(,)等(可以隔許多個),是存儲大量容器型數據的數據。 # 其他語言中沒有元組的概念,只有Python有。 # 元組中的數據不能修改,只能查詢。雖然元組不能修改,但是裡面的字典、列表等元素可被修改。 # 元組中存儲的一般是非常重要的數據,如個人信息等。一般來說元組很少用。 # b.請問tu變數中的第一個元素"alex"是否可被修改? # 不可以.因為是元組. # 嘗試: # tu[0] = 1 # print(tu)#tuple是只可讀,而不支持寫的,所以,在這就出現了關於tuple的問題,就會出現問題。 # c.請問tu變數中的"k2"對應的值是什麼類型?是否可以被修改?如果可以,請在其中添加一個元素"Seven" # 對應的是list列表. 可以被修改. # print(tu[1][2][k2],type(tu[1][2][k2])) #如果不知道dict中是否有key的值 # tu[1][2][k2].append(seven) # dict.get(key) # print(tu[1][2][k2]) #如果用 dict[key] 讀取會報KeyError異常 # d.請問tu變數中的"k3"對應的值是什麼類型?是否可以被修改?如果可以,請在其中添加一個元素"Seven" # 是元組. 不可以被修改. # print(tu[-1][-2][k3],type(tu[-1][-2][k3])) # 2.字典dic, dic = {k1: "v1", "k2": "v2", "k3": [11, 22, 33]} # dic = {k1: "v1", "k2": "v2", "k3": [11, 22, 33]} # a.請循環輸出所有的key # for key in dic : # print(key) # b.請循環輸出所有的value # for key in dic : # print(dic[key]) # c.請循環輸出所有的key和value # 不美觀: # for key in dic : # print(key,dic[key]) # 較美觀: # for key in dic: # print(dic[%s]= % key,dic[key] ) # d.請在字典中添加一個鍵值對,"k4": "v4",輸出添加後的字典 # 法一: # dic[k4] = v4 # print(dic) # 法二: # dic.setdefault(k4,v4) # print(dic) # dic = {k1: "v1", "k2": "v2", "k3": [11, 22, 33]} # e.請在修改字典中"k1"對應的值為"alex",輸出修改後的字典 # 法一: # dic[k1] = alex # print(dic) # 法二: # dic.update(k1=alex) # print(dic) # f.請在k3對應的值中追加一個元素44,輸出修改後的字典 # dic[k3].append(44) # print(dic) # g.請在k3對應的值的第1個位置插入個元素18,輸出修改後的字典 # dic[k3].insert(0,18) # print(dic) # 3. # av_catalog = { # "歐美": # { # "www.太白.com": ["很多免費的,世界最大的", "質量?般"], # "http://www.alex.com": ["很多免費的,也很大", "質量比yourporn比高點"], # "http://oldboy.com": ["多是自拍,比高質量圖片很多", "資源不多,更新慢"], # "http://hao222.com": ["質量很高,真的很高", "全部收費,屌絲請繞過"] # }, # "日韓": # { # "tokyo-hot": ["質量怎樣不清楚,個人已經不喜歡日韓范了", "verygood"] # }, # "大陸": # { # "1024": ["全部免費,真好,好人?生平安", "伺服器在國外,慢"] # } # } # a, 給此["很多免費的,世界最大的", "質量?般"]列表第?個位置插入?個元素:量很大。 # av_catalog[歐美][www.太白.com].insert(1,量很大) # print(av_catalog) # b, 將此["質量很比高,真的很比高", "全部收費,屌絲請繞過"]列表的"全部收費,屌絲請繞過"刪除。 # 法一: # av_catalog[歐美][hao222.com].pop(1) # print(av_catalog) # 法二: # av_catalog[歐美][hao222.com].remove("全部收費,屌絲請繞過") # print(av_catalog) # 法三: # del av_catalog[歐美][hao222.com][1] # print(av_catalog) # c, 將此["質量怎樣不清楚,個人已經不喜歡日韓范了", "verygood"]列表的"verygood"全部變成大寫。 # av_catalog[日韓][tokyo-hot][1] = av_catalog[日韓][tokyo-hot][1].upper() # print(av_catalog) # d, 給大陸對應的字典添加?個鍵值對1048: [?天就封了] # 法一: # av_catalog[大陸][1048]=[?天就封了] # print(av_catalog) # 法二: # av_catalog[大陸].setdefault(1048, [?天就封了]) # print(av_catalog) # e.刪除該鍵值對. "http://oldboy.com": ["多是自拍,高質量圖片很多", "資源不多,更新慢"] # del av_catalog[歐美][oldboy.com] # print(av_catalog) # f, 給此["全部免費,真好,好人?生平安", "伺服器在國外,慢"]列表的第?個元素,加上?句話:可以爬下來 # av_catalog[大陸][1024][0]+=,可以爬下來 # print(av_catalog) # 4.有字元串"k: 1|k1 :2|k2:3 |k3 :4"處理成字典{k: 1, k1: 2....}(升級題) # 法一: # s1 = "k: 1|k1 :2|k2:3 |k3 :4" # l2 = [] # dic1={} # l1 = s1.split(|) # for i in l1: # l2 = i.split(:) # dic1[%s%l2[0].strip()]= int(l2[1]) # print(dic1) # 法二: # strings = "k: 1|k1 :2|k2:3 |k3 :4" # li2 = [] # dic = {} # # li = strings.split("|") # # for lst in li: # lst = lst.split(":") # li2.append(lst) # # for x, y in li2: # x = x.strip() # y = int(y.strip()) # dic[x] = y # # print(dic) # 5.元素分類有如下值li = [11, 22, 33, 44, 55, 66, 77, 88, 99, 90],將所有大於66的值 # 保存至字典的第一個key中,將小於66的值保存至第二個key的值中。 # 即: {k1: 大於66的所有值列表, k2: 小於66的所有值列表} # 法一: # li = [11, 22, 33, 44, 55, 66, 77, 88, 99, 90] # dic ={k1:[],k2:[]} # for i in li : # if int(i) < 66 : # dic[k1].append(i) # elif int(i) > 66 : # dic[k2].append(i) # print(dic) # 法二: # li = [11, 22, 33, 44, 55, 66, 77, 88, 99, 90] # d = {} # for e in li: # if e > 66: # # 若bigger鍵已經存在,就把已經存在的列表取出,然後再把當前元素追加到列表上. # value = d.get(bigger, []) # value.append(e) # d[bigger] = value # elif e < 66: # # 若smaller鍵已經存在,就把已經存在的列表取出,然後再把當前元素追加到列表上. # value = d.get(smaller, []) # value.append(e) # d[smaller] = value # print(d) # 6.輸出商品列表,用戶輸入序號,顯示用戶選中的商品 # 商品列表: # goods = [{"name": "電腦", "price": 1999}, # {"name": "滑鼠", "price": 10}, # {"name": "遊艇", "price": 20}, # {"name": "美女", "price": 998}, ] # # 要求: # 1:?面顯示 序號 + 商品名稱 + 商品價格,如: # 1 電腦 1999 # 2 滑鼠 10 # … # 2:用戶輸入選擇的商品序號,然後列印商品名稱及商品價格 # 3:如果用戶輸入的商品序號有誤,則提示輸入有誤,並重新輸入。 # 4:用戶輸入Q或者q,退出程序。 # 法一(寫錯了,題目理解錯誤): # while True: # num = input(請輸入商品序號(1~4,按Q(不區分大小寫)退出):).strip() # if num == Q or num == q: # break # for i in range(1, len(goods)+1): # if num == str(i): # print( # 序號 商品名稱 商品價格 # %s %s %s # % (num, goods[int(i)-1][name], goods[int(i)-1][price])) # break # else: # if i == len(goods): # print(輸入有誤,請重新輸入) # 法二: # # 輸出商品信息 # print("序號 商品 價格") # for i in range(len(goods)): # print(i+1, " ", goods[i]["name"], " ", goods[i]["price"], sep="") # # while True: # 用戶選擇商品並反饋信息 # buy = input("請輸入: ").strip() # if buy.upper() == "Q": # break # # if buy.isdigit() and int(buy) <= len(goods): # # 由於buy是字元串類型, 負數在字元串中由於存在特殊字元"-", 因此不是純數字組成, 如果用戶輸入負數, buy.isdigit()返回False # print("商品", " ", "價格", sep="") # print(goods[int(buy) - 1]["name"], " ", goods[int(buy) - 1]["price"], sep="") # else: # print("輸入錯誤, 請重新輸入") # 法一: # while 1: # for i in range(len(goods)): # print(序號 name price
{} {} {}.format(i + 1, goods[i][name], goods[i][price])) # msg = input(請輸入序號(1~4),按Q可退出:) # if msg.upper() == Q : # break # for i in range(len(goods)): # if 0< i+1 < len(goods) : # if msg == str(i+1) : # print(name price
{} {}.format(goods[i][name], goods[i][price])) # break # else : # print(輸入錯誤,請重新輸入) # break#isdigit會過濾小數
03 小數據池(了解)
不多解釋,只需要注意,同一代碼塊和不同代碼塊的緩存機制(駐留機制)不同.
同一代碼塊的id相同.
s = zhangwuji print(id(s)) # 獲取內存地址 # == 判斷兩個對象的值相同.
is 身份運算:判斷的是兩個對象的內存地址是否相同.
demo3: i1 =1000 i2 = 1000 print(i1 is i2) 輸出結果為True.
不同代碼塊參考小數據池(緩存範圍是-5~256)即數字在這區間是正確的.