日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python的字典与集合

發布時間:2024/9/3 python 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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
# 2. 集合的特性: # 不支持+,*, index, slice(因為集合無序不重復的) # 支持in和not in print(1 in {1, 2, 3, 4}) #Ture

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。
s = frozenset({1,2,3}) print(s,type(s))

代碼運行結果:

二、字典

字典是另一種可變容器模型,且可存儲任意類型對象。
鍵一般是唯一的,如果重復最后的一個鍵值對會替換前面的,值不需要唯一。

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)
# 1.查看 d = {"name":"sun","age":18,"city":"西安"} print(d.keys()) # 查看字典所有的key值 print(d.values()) #查看字典所有地value值 print(d.items()) #查看字典所有地key-value值(items 元素) print(d['name']) #查看key-name對應地value值 #print(d['province']) #查看key對應地value值,如果不存在地話會報錯 print(d.get('province')) #查看key對應地value值,如果存在返回,如果不存在返回None print(d.get('province',"陜西")) ##查看key對應地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.練習題

兩數之和力扣鏈接

直接在力扣上作答即可

class Solution:def twoSum(self, nums: List[int], target: int) -> List[int]:# {2:0,7:1,11:3,15:4} #哈希/字典:特別特別重要的是查詢時的時間復雜度為O(1)hashes = {}n = len(nums)for i in range(n):if target - nums[i] in hashes:return hashes[target - nums[i]] , ihashes[nums[i]] = i

5.拓展:defaultdict

collections.defaultdict類,本身提供了默認值的功能, 默認值可以是整形,列表,集合等.

defaultdict 是 dict 的子類。但它與 dict 最大的區別在于,如果程序試圖根據不存在的 key 訪問 value,會引發 KeyError 異常;而 defaultdict 提供default_factory 屬性,該為不存在的 key 來自動生成生成默認的 value。
需求:
我們想要一個能將鍵(key)映射到多個值的字(即所謂的一鍵多值字典)

解決方案:
1). 字典是一種關聯容器,每個鍵都映射到一個單獨的值上。如果想讓鍵映射到多個值,需要將這些多個值保存到容器(列表或者集合)中。
2). 利用collections模塊中的defaultdict類自動初始化第一個值,這樣只需關注添加元素.

from collections import defaultdict# 默認字典,設置默認value值 d = defaultdict(list) d['allow_users'].append("user1") d['deny_users'].extend(["user2","user3"]) print(d)d = defaultdict(set) d['love_movies'].add("你好 李煥英") d['dislike_movies'].update({"唐人街探案3","刺殺小說家"}) print(d)

代碼運行結果:

練習:無重復字符的最長字串

總結

以上是生活随笔為你收集整理的python的字典与集合的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。