python學習筆記9(字典與集合)
阿新 • • 發佈:2019-01-04
字典與集合
字典
定義:
使用鍵-值(key-value)儲存,具有極快的查詢速度
注意: 字典是無序的
key的特性:
1、字典中的key必須唯一
2、key必須是不可變物件
3、字串、整數等都是不可變的,可以作為key
4、list是可變的,不能作為key
思考: 儲存多位學生的姓名與成績
使用字典,學生姓名為key,學生成績作為值
dict1 = {"tom":60, "lilei":70}
元素的訪問
獲取: 字典名[key]
print(dict1["lilei"]) #print(dict1["sunck"])#沒有 print(dict1.get("sunck")) ret = dict1.get("sunck") if ret == None: print("沒有") else: print("有") #輸出: 70 None 沒有
新增
dict1["hanmeimei"] = 99
修改
#因為一個key對應一個value,所以,多次對一個key的value賦值,其實就是修改值
dict1["lilei"] = 80
print(dict1)
刪除
dict1.pop("tom")
print(dict1)
遍歷
dict1 = {"tom":60, "lilei":70} for key in dict1: print(key, dict1[key]) #輸出: #tom 60 #lilei 70 print(dict1.values()) #輸出:dict_values([60, 70]) for value in dict1.values(): #[60,80,90] print(value) #輸出:60 70 print(dict1.items()) #輸出:dict_items([('tom', 60), ('lilei', 70)]) for k, v in dict1.items(): print(k, v) #輸出: #tom 60 #lilei 70 for i, v2 in enumerate(dict1): print(i, v2) #輸出: 0 tom 1 lilei
字典和list比較
1、查詢和插入的速度極快,不會隨著key-value的增加而變慢
2、需要佔用大量的記憶體,記憶體浪費多
list
1、查詢和插入的速度隨著資料量的增多而減慢
2、佔用空間小,浪費記憶體少
w = input() #w = "good" str = "sunck is a good man!sunck is a nice man!sunck is a hands man! sunck is a good man!sunck is a nice man!sunck is a great man!sunck is a noble man!sunck is a cool man!" print(str.count(w))
集合(set)
概述: 類似dict,是一組key的集合,不儲存value
本質: 無序和無重複元素的集合
建立
建立set需要一個list或者tuple或者dict作為輸入集合,重複元素在set中會自動被過濾
s1 = set([1,2,3,4,5,3,4,5])
print(s1)
s2 = set((1,2,3,3,2,1))
print(s2)
s3 = set({1:"good", 2:"nice"})
print(s3)
#輸出:
#{1, 2, 3, 4, 5}
#{1, 2, 3}
#{1, 2}
新增
s4 = set([1,2,3,4,5])
s4.add(6)
s4.add(3) #可以新增重複的,但是不會有效果
#s4.add([7,8,9]) #set的元素不能是列表,因為列表是可變的
s4.add((7,8,9))
#s4.add({1:"a"}) #set的元素不能是字典,因為字典是可變的
print(s4)
#輸出:{1, 2, 3, 4, 5, 6, (7, 8, 9)}
update(): 插入整個list、tuple、字串,打碎插入
s5 = set([1,2,3,4,5])
s5.update([6,7,8])
s5.update((9,10))
s5.update("sunck")
print(s5)
#輸出:{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 'n', 'c', 'u', 's', 'k'}
刪除
s6 = set([1,2,3,4,5])
s6.remove(3)
print(s6)
遍歷
s7 = set([1,2,3,4,5])
for i in s7:
print(i)
set沒有索引
print(s7[3]) #報錯
enumerate(): 用於將一個可遍歷的資料物件(如列表、元組或字串)組合為一個索引序列,同時列出資料和資料下標,一般用在 for 迴圈當中
for index, data in enumerate(s7):
print(index, data)
#輸出:
0 1
1 2
2 3
3 4
4 5
交集與並集
s8 = set([1,2,3])
s9 = set([2,3,4])
#交集
a1 = s8 & s9
print(a1)
print(type(a1))
#並集
a2 = s8 | s9
print(a2)
print(type(a2))
型別轉化
#list-->set
l1 = [1,2,3,4,5,3,4,5]
s1 = set(l1)
#tuple-->set
t2 = (1,2,3,4,3,2)
s2 = set(t2)
#set-->list
s3 = {1,2,3,4}
l3 = list(s3)
print(l3)
#set-->tuple
s4 = {2,3,4,5}
t4 = tuple(s4)
print(t4)
用set去重
l = [1,2,3,4,3,4,5,6]
'''
s = set(l)
l = list(s)
print(l)
'''
l = list(set(l))
print(l)