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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python的字典与集合

發(fā)布時(shí)間:2024/9/3 python 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python的字典与集合 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、集合

集合(set)是一個(gè)無序的不重復(fù)元素序列。1,2,3,4,1,2,3 = 1,2,3,4

1.集合的創(chuàng)建

# 1. 集合的創(chuàng)建 s = {1, 2, 3, 1, 2, 3} # {1, 2, 3} print(s, type(s)) # 注意點(diǎn)1: 集合的元素必須時(shí)不可變數(shù)據(jù)類型。 # s = {1, 2, 3, [1, 2, 3]} # print(s, type(s)) # 注意點(diǎn)2:空集合不能使用{}, 而要使用set() # s = {} # print(s, type(s)) s = set() print(s, type(s))

代碼運(yùn)行結(jié)果:

2. 集合的特性

  • 不支持+,*, index, slice(因?yàn)榧蠠o序不重復(fù)的)
  • 支持in和not in
# 2. 集合的特性: # 不支持+,*, index, slice(因?yàn)榧蠠o序不重復(fù)的) # 支持in和not in print(1 in {1, 2, 3, 4}) #Ture

3. 集合的常用操作

1).增加

# add: 添加單個(gè)元素 # update: 添加多個(gè)元素 s = {1, 2, 3} s.add(100) print(s) s = {1, 2, 3} s.update({4, 5, 6}) print(s)

代碼運(yùn)行結(jié)果:

2).刪除

# remove: 如果元素存在,刪除,否則報(bào)錯(cuò) # discard: 如果元素存在,刪除,否則do nothing # pop: 隨機(jī)刪除元素,集合為空則報(bào)錯(cuò) 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)

代碼運(yùn)行結(jié)果:

3).查看

# 差集: s1 - s2 # 交集: s1 & s2 # 對(duì)稱差分: 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

代碼運(yùn)行結(jié)果:

4.集合練習(xí)題

明明想在學(xué)校中請(qǐng)一些同學(xué)一起做一項(xiàng)問卷調(diào)查,為了實(shí)驗(yàn)的客觀性,他先用計(jì)算機(jī)生成了N個(gè)1到1000之間的隨機(jī)整數(shù)(N≤1000),對(duì)于其中重復(fù)的數(shù)字,只保留一個(gè),把其余相同的數(shù)去掉,不同的數(shù)對(duì)應(yīng)著不同的學(xué)生的學(xué)號(hào)。然后再把這些數(shù)從大到小排序,按照排好的順序去找同學(xué)做調(diào)查。請(qǐng)你協(xié)助明明完成“去重”與“排序”的工作(同一個(gè)測(cè)試用例里可能會(huì)有多組數(shù)據(jù),希望大家能正確處理)。

import random N = int(input("請(qǐng)輸入隨機(jī)數(shù)個(gè)數(shù):")) s = set() for item in range(1,N):s.add(random.randint(1,1000)) s = sorted(s,reverse=True) print(s)

代碼運(yùn)行結(jié)果:

5.拓展: frozenset不可變的集合

frozenset 是 set 的不可變版本,因此 set 集合中所有能改變集合本身的方法(如 add、remove、discard、xxx_update 等),frozenset 都不支持;set 集合中不改變集合本身的方法,fronzenset 都支持。
frozenset 的這些方法和 set 集合同名方法的功能完全相同。frozenset 的作用主要有兩點(diǎn):

  • 當(dāng)集合元素不需要改變時(shí),使用 frozenset 代替 set 更安全。
  • 當(dāng)某些 API 需要不可變對(duì)象時(shí),必須用 frozenset 代替set。比如 dict 的 key 必須是不可變對(duì)象,因此只能用 frozenset;再比如 set 本身的集合元素必須是不可變的,因此 set 不能包含 set,set 只能包含 frozenset。
s = frozenset({1,2,3}) print(s,type(s))

代碼運(yùn)行結(jié)果:

二、字典

字典是另一種可變?nèi)萜髂P?#xff0c;且可存儲(chǔ)任意類型對(duì)象。
鍵一般是唯一的,如果重復(fù)最后的一個(gè)鍵值對(duì)會(huì)替換前面的,值不需要唯一。

1.字典的創(chuàng)建dict

# key-value對(duì)或者鍵值對(duì) d = {"name":"sun","age":18,"city":"西安"} print(d,type(d)) d = {} print(d,type(d))

代碼運(yùn)行結(jié)果:

2.字典的特性

# 不支持+,*, index, slice(因?yàn)榧蠠o序不重復(fù)的) # 支持in和not in d = {"name":"sun","age":18,"city":"西安"} print('name' in d) #Ture 成員操作符判斷的是key值是否存在 print("sun" in d) #False

代碼運(yùn)行結(jié)果:

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對(duì)應(yīng)地value值 #print(d['province']) #查看key對(duì)應(yīng)地value值,如果不存在地話會(huì)報(bào)錯(cuò) print(d.get('province')) #查看key對(duì)應(yīng)地value值,如果存在返回,如果不存在返回None print(d.get('province',"陜西")) ##查看key對(duì)應(yīng)地value值,如果存在返回,如果不存在返回默認(rèn)值

代碼運(yùn)行結(jié)果:

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)

代碼運(yùn)行結(jié)果:

3.刪除

# 3.刪除 d = {'name':'sun','age':18} d.pop('name') print(d) d = {'name':'sun','age':18} del d['age'] print(d)

代碼運(yùn)行結(jié)果:

4.遍歷字典(for)

# 4.遍歷字典(for) d = {'name':'sun','age':18,'city':'西安'} # 默認(rèn)情況下,字典只會(huì)遍歷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}")

代碼運(yùn)行結(jié)果:

4.練習(xí)題

兩數(shù)之和力扣鏈接

直接在力扣上作答即可

class Solution:def twoSum(self, nums: List[int], target: int) -> List[int]:# {2:0,7:1,11:3,15:4} #哈希/字典:特別特別重要的是查詢時(shí)的時(shí)間復(fù)雜度為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類,本身提供了默認(rèn)值的功能, 默認(rèn)值可以是整形,列表,集合等.

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

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

from collections import defaultdict# 默認(rèn)字典,設(shè)置默認(rèn)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)

代碼運(yùn)行結(jié)果:

練習(xí):無重復(fù)字符的最長字串

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。