python的字典与集合
一、集合
集合(set)是一個無序的不重復元素序列。1,2,3,4,1,2,3 = 1,2,3,4
1.集合的創建
# 1. 集合的創建 s = {1, 2, 3, 1, 2, 3} # {1, 2, 3} print(s, type(s)) # 注意點1: 集合的元素必須時不可變數據類型。 # s = {1, 2, 3, [1, 2, 3]} # print(s, type(s)) # 注意點2:空集合不能使用{}, 而要使用set() # s = {} # print(s, type(s)) s = set() print(s, type(s))代碼運行結果:
2. 集合的特性
- 不支持+,*, index, slice(因為集合無序不重復的)
- 支持in和not in
3. 集合的常用操作
1).增加
# add: 添加單個元素 # update: 添加多個元素 s = {1, 2, 3} s.add(100) print(s) s = {1, 2, 3} s.update({4, 5, 6}) print(s)代碼運行結果:
2).刪除
# remove: 如果元素存在,刪除,否則報錯 # discard: 如果元素存在,刪除,否則do nothing # pop: 隨機刪除元素,集合為空則報錯 s = {1, 2, 3} s.remove(3) print(s) s = {1, 2, 3} s.discard(100) print(s) s = {1, 66, 2,99, 78, 3} s.pop() print(s)代碼運行結果:
3).查看
# 差集: s1 - s2 # 交集: s1 & s2 # 對稱差分: s1 ^ s2 # 并集: s1 | s2 s1 = {1, 2, 3} s2 = {1, 2} print(s1 - s2) # {3} print(s1 & s2) # {1, 2} s1 = {1, 2, 3} s2 = {1, 2, 4} print(s1 ^ s2) # {3, 4}, {1, 2, 3, 4} - {1, 2} = {3,4} print(s1 | s2) # {1, 2, 3, 4} print(s1.issubset(s2)) # False print(s1.isdisjoint(s2)) # False代碼運行結果:
4.集合練習題
明明想在學校中請一些同學一起做一項問卷調查,為了實驗的客觀性,他先用計算機生成了N個1到1000之間的隨機整數(N≤1000),對于其中重復的數字,只保留一個,把其余相同的數去掉,不同的數對應著不同的學生的學號。然后再把這些數從大到小排序,按照排好的順序去找同學做調查。請你協助明明完成“去重”與“排序”的工作(同一個測試用例里可能會有多組數據,希望大家能正確處理)。
import random N = int(input("請輸入隨機數個數:")) s = set() for item in range(1,N):s.add(random.randint(1,1000)) s = sorted(s,reverse=True) print(s)代碼運行結果:
5.拓展: frozenset不可變的集合
frozenset 是 set 的不可變版本,因此 set 集合中所有能改變集合本身的方法(如 add、remove、discard、xxx_update 等),frozenset 都不支持;set 集合中不改變集合本身的方法,fronzenset 都支持。
frozenset 的這些方法和 set 集合同名方法的功能完全相同。frozenset 的作用主要有兩點:
- 當集合元素不需要改變時,使用 frozenset 代替 set 更安全。
- 當某些 API 需要不可變對象時,必須用 frozenset 代替set。比如 dict 的 key 必須是不可變對象,因此只能用 frozenset;再比如 set 本身的集合元素必須是不可變的,因此 set 不能包含 set,set 只能包含 frozenset。
代碼運行結果:
二、字典
字典是另一種可變容器模型,且可存儲任意類型對象。
鍵一般是唯一的,如果重復最后的一個鍵值對會替換前面的,值不需要唯一。
1.字典的創建dict
# key-value對或者鍵值對 d = {"name":"sun","age":18,"city":"西安"} print(d,type(d)) d = {} print(d,type(d))代碼運行結果:
2.字典的特性
# 不支持+,*, index, slice(因為集合無序不重復的) # 支持in和not in d = {"name":"sun","age":18,"city":"西安"} print('name' in d) #Ture 成員操作符判斷的是key值是否存在 print("sun" in d) #False代碼運行結果:
3.字典的常用方法
1.查看
- 查看所有:keys,values,items
- 查看局部:d[key],d.get(key),d.get(key,default-value)
代碼運行結果:
2.增加和修改
# 2.增加和修改 d = {"name":"sun","age":18} d['city'] = "西安" # key不存在就添加 print(d) d['city'] = "成都" # key存在就修改 print(d) d = {"name":"sun","age":18} d.setdefault('city',"西安") # key不存在就添加 print(d) d.setdefault('city','北京') #key存在do nothing print(d)代碼運行結果:
3.刪除
# 3.刪除 d = {'name':'sun','age':18} d.pop('name') print(d) d = {'name':'sun','age':18} del d['age'] print(d)代碼運行結果:
4.遍歷字典(for)
# 4.遍歷字典(for) d = {'name':'sun','age':18,'city':'西安'} # 默認情況下,字典只會遍歷key值 for item in d:print(item)#如果遍歷字典地key和value值 for item in d.items():print(item) for key,value in d.items():print(f"key={key},value={value}")代碼運行結果:
4.練習題
兩數之和力扣鏈接
直接在力扣上作答即可
5.拓展:defaultdict
collections.defaultdict類,本身提供了默認值的功能, 默認值可以是整形,列表,集合等.
defaultdict 是 dict 的子類。但它與 dict 最大的區別在于,如果程序試圖根據不存在的 key 訪問 value,會引發 KeyError 異常;而 defaultdict 提供default_factory 屬性,該為不存在的 key 來自動生成生成默認的 value。
需求:
我們想要一個能將鍵(key)映射到多個值的字(即所謂的一鍵多值字典)
解決方案:
1). 字典是一種關聯容器,每個鍵都映射到一個單獨的值上。如果想讓鍵映射到多個值,需要將這些多個值保存到容器(列表或者集合)中。
2). 利用collections模塊中的defaultdict類自動初始化第一個值,這樣只需關注添加元素.
代碼運行結果:
練習:無重復字符的最長字串
總結
以上是生活随笔為你收集整理的python的字典与集合的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python的列表和元组
- 下一篇: python持久化存储文件操作