字典、元組、集合內建方法
阿新 • • 發佈:2022-03-10
字典的內建方法
1.型別轉換 dict() d1 = { 'name': 'jason', 'age': 18, 'hobbies': ['play game', 'basketball'] } # 1.按key取值 print(d1['name']) # jason 鍵存在 # print(d1['xxx']) # 鍵不存在直接報錯 """涉及到字典取值 更加推薦下面的方式""" print(d1.get('name')) # jason 鍵存在 print(d1.get('xxx')) # 鍵不存在不會報錯 而是返回None print(d1.get('xxx', 'name')) # 第二個引數不寫預設返回None 寫了則返回寫了的 print(d1.get('name', '這個鍵不存在')) # 如果鍵存在 則不需要使用到第二個引數
# 2.修改值 字典也是可變型別
print(id(d1))
d1['name'] = 'jasondsb' # 鍵存在是修改值
print(d1, id(d1))
# 3.新增鍵值對
d1['pwd'] = 123 # 鍵不存在則是新增一個鍵值對
print(d1)
# 4.統計字典中鍵值對的個數
print(len(d1)) # 3
# 5.成員運算 也只能判斷key而已
print('jason' in d1)# False
print('name' in d1) # True
# 6.刪除鍵值對 del d1['name'] # 通用的刪除方式 print(d1) # {'age': 18, 'hobbies': ['play game', 'basketball']} print(d1.pop('age')) # 18 彈出 print(d1) # {'hobbies': ['play game', 'basketball']} d1.popitem() # 隨機彈出一個(使用頻率很低 可以忽略) print(d1)
# 7.獲取所有的鍵 所有的值 所有的鍵值對 print(d1.keys()) # dict_keys(['name', 'age', 'hobbies']) 可以看成是列表 print(d1.values()) # dict_values(['jason', 18, ['play game', 'basketball']]) 可以看成是列表 print(d1.items()) # dict_items([('name', 'jason'), ('age', 18), ('hobbies', ['play game', 'basketball'])]) 可以看成是列表套元組 for v in d1.values(): print(v) """在python2中上述三個方法就是直接返回一個列表 """ #######################需要了解###################### # 1.update更新字典 dic = {'k1': 'jason', 'k2': 'tony', 'k3': 'jy'} dic.update({'k1': 'jn', 'k4': 'xxx'}) print(dic) # 鍵存在則修改 鍵不存在則新增 # 2.fromkeys()快速生成字典 dic = dict.fromkeys(['k1', 'k2', 'k3'], []) print(dic) # {'k1': [], 'k2': [], 'k3': []} """筆試題""" dic['k1'].append(111) # 三個鍵指向的是同一個列表 print(dic) # {'k1': [111], 'k2': [111], 'k3': [111]} # 3.setdefault() dic = {'k1': 111, 'k2': 222} print(dic.setdefault('k3', 333)) # 鍵不存在則新增鍵值對 並且有返回結果是新增的v print(dic) print(dic.setdefault('k1', '嘿嘿嘿')) # 鍵存在 則返回對應的值 不做修改 print(dic)
元組內建方法
# 可以看成是不可變的列表
1.型別轉換
支援for迴圈的資料型別都可以轉成元組
# print(tuple(11)) # 報錯
# print(tuple(11.11)) # 報錯
print(tuple('jason'))
print(tuple([11,22,33,44]))
print(tuple({'name':'jason'}))
print(tuple({11,22,33,44}))
# print(tuple(True)) # 報錯
2.元組的特性
# t1 = (11, 22, 33, 44)
# print(type(t1)) # <class 'tuple'>
# t2 = (11)
# print(type(t2)) # int
# t2 = (11.11)
# print(type(t2)) # float
# t2 = ('jason')
# print(type(t2)) # str
"""當元組內只有一個元素的時候 一定要在元素的後面加上逗號"""
# t2 = (11,)
# print(type(t2)) # tuple
# t2 = (11.11,)
# print(type(t2)) # tuple
# t2 = ('jason',)
# print(type(t2)) # tuple
"""
一般情況下 我們會習慣的將所有可以儲存的多個數據的型別的資料
如果內部只有一個元素 也會加逗號
(1,)
[1,]
{1,}
{'name':'jason',}
"""
t1 = (11, 22, 33, 44, 55, 66)
# 1.索引取值
# print(t1[0])
# print(t1[-1])
# 2.切片操作
# print(t1[1:4])
# print(t1[-1:-4:-1])
# print(t1[-4:-1])
# 3.間隔
# print(t1[1:4:2]) # (22, 44)
# 4.統計元組內元素的個數
# print(len(t1)) # 6
# 5.成員運算
# print(11 in t1) # True
# 6.統計某個元素出現的次數
# print(t1.count(22))
# 7.元組內元素不能"修改": 元組內各個索引值指向的記憶體地址不能修改
# t1[0] = 111 # 報錯
"""
筆試題
tt = (11, 22, 33, [11, 22])
tt[-1].append('heiheihei')
問:執行之後的結果 正確答案選B
A.報錯 B.正常新增 C.不知道
"""
tt = (11, 22, 33, [11, 22])
print(id(tt[-1]))
tt[-1].append('heiheihei')
print(id(tt[-1]))
print(tt)
集合內建方法
1.型別轉換
# print(set(11)) # 報錯
# print(set(11.11)) # 報錯
# print(set('jason'))
# print(set([11,22,33,44]))
# print(set({'name':'jason'}))
# print(set((11,22,33)))
# print(set(True)) # 報錯
"""集合內元素只能是不可變型別"""
"""集合只會在去重和關係運算中使用 甚至有時候也不會用"""
2.兩大功能
1.去重
集合內不能出現重複的元素(自帶去重特性)
如果出現了 會被集合自動去重
2.關係運算
判斷兩個群體內的差異
eg:共同好友 共同關注 共同點贊
# s1 = {1,1,1,1,1,1,2,2,2,2,2,1,2,3,2,2,1,2,3,2,3,4,3,2,3}
# print(s1) # {1, 2, 3, 4}
# l = ['a', 'b', 1, 'a', 'a']
# s1 = set(l)
# l = list(s1)
# print(l)
# 關係運算
f1 = {'jason', 'kevin', 'tony', 'jerry'} # 小李的好友列表
f2 = {'jason', 'tom', 'jerry', 'jack'} # 小王的好友列表
# 1.求兩個人的共同好友
# print(f1 & f2) # {'jerry', 'jason'}
# 2.求小李的單獨好友
# print(f1 - f2) # {'kevin', 'tony'}
# 3.求兩個人所有的好友
# print(f1 | f2) # {'kevin', 'jack', 'tom', 'jason', 'jerry', 'tony'}
# 4.求兩個人各自的好友
print(f1 ^ f2) # {'jack', 'tony', 'tom', 'kevin'}
垃圾回收機制
"""python底層針對空間的申請和釋放都是設計好的 不需要程式設計師操心"""
1.引用計數
python會將引用計數為0的資料清除
name = 'jason' # jason引用計數為1
a = name # jason引用計數為2
'''記憶體中資料身上繫結的變數名的個數'''
# ps:還可以瞭解一下迴圈引用的情況
2.標記清除
當記憶體空間即將溢位(滿了)的時候 python會自動啟動應急機制
停止程式的執行 挨個檢查值的引用計數並給計數為0的資料打上標記
然後一次性清理掉
3.分代回收
根據值存在的時間長短 將值劃分為三個等級(1,2,3)
等級1 檢測機制每隔5s來一次
等級2 檢測機制每隔1min來一次
等級3 檢測機制每隔5min來一次
習題
# 3.不使用count統計列表中指定元素出現的次數
l = [1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, ]
while True:
target = input('請輸入統計資料:').strip()
if target.isdigit():
count = 0
target = int(target)
for i in l:
if target == i:
count += 1
print(f'{target}出現有{count}次')
# 2.利用列表編寫一個使用者註冊、登入程式
# 提示:迴圈
# 要求:成功一次即可 無需考慮使用者衝突等情況
# 1.先定義儲存使用者資料
data_list = []
# 2.迴圈列印功能 供使用者執行選擇
while True:
# 3.列印功能序號
print("""
1.註冊
2.登入
3.檢視所有使用者資訊
""")
# 4.獲取功能編號
chioce = input('輸入執行編號:')
# 5.判斷執行幾號
if chioce == '1':
username = input('username:').strip()
password = input('password:').strip()
# 6.1.判斷使用者名稱不能衝突
for user in data_list:
# 6.2.如果考慮密碼是使用者名稱 使用者名稱是其他'
if username == user.split('|')[0]:
print('使用者已存在')
break
else:
# 7.將使用者名稱和密碼拼接到一起
user_data = f'{username}|{password}'
# 8.新增到列表中
data_list.append(user_data)
# 9.提示使用者註冊成功
print(f'{username}註冊成功')
elif chioce == '2':
username = input('username>>>:').strip()
password = input('password>>>:').strip()
user_data1 = f'{username}|{password}'
for data in data_list:
if user_data1 == data:
print('登陸成功')
else:
print('使用者或密碼錯誤')
elif chioce == '3':
print(data_list)
else:
print('你能不能好好的輸 眼瞎是吧!!!')