首页 > 其他分享 >23 - 集合与映射类型

23 - 集合与映射类型

时间:2024-02-21 17:44:33浏览次数:27  
标签:set 映射 23 元素 other frozenset 集合 字典

集合与映射类型

集合类型(Set Type)

集合类型对象是由具有唯一性的可哈希对象所组成的无序多项集。

由于集合类型是无序的,它并不记录元素位置或插入顺序,因此集合类型不支持索引、切片或其他序列类的操作。

类型 对应关键字 构造函数 是否可变 是否可哈希
set set set() 可变 不可哈希
frozenset frozenset frozenset() 不可变 可哈希

setfrozenset 的构建方式:

  • 使用花括号内以逗号分隔元素的方式: {'jack', 'sjoerd'}
  • 使用集合推导式: {c for c in 'abracadabra' if c not in 'abc'}
  • 使用类型构造器: set(), set('foobar'), set(['a', 'b', 'foo'])

frozenset 可通过构造函数 frozenset() 来创建:

class set([iterable])
class frozenset([iterable])

上述俩种构建器输入一个可迭代对象( iterable )返回一个新的 setfrozenset 对象。 如果未指定可迭代对象,则将返回一个新的空集合。

由于集合的元素必须为可哈希的,因此元素为集合的集合,其所有的内层集合必须为 frozenset对象。

集合类型通用操作 (可用于 setfrozenset)

下表中 s 代表多项集(collection),x 是任何满足 s 所规定的类型和值限制的任意对象,set代表集合,other代表另一集合。

( union()intersection()difference()symmetric_difference()issubset()issuperset() 方法可以接受任何可迭代对象作为参数, 而基于运算符的对应方法则要求参数为集合对象。)
(混合了 set 实例与 frozenset 的二进制位运算将返回与第一个操作数相同的类型。例如: frozenset('ab') | set('bc') 将返回 frozenset 的实例。)

操作 操作说明
len(s) 返回集合 s 中的元素数量(即 s 的基数)。
x in s 检测 x 是否为 s 中的成员。
x not in s 检测 x 是否非 s 中的成员。
isdisjoint(other) 如果集合中没有与 other 共有的元素则返回 True。 当且仅当两个集合的交集为空集合时,两者为不相交集合。
set <= otherissubset(other) 检测是否集合中的每个元素都在 other 之中。
set < other 检测集合是否为 other 的真子集,即 set <= other and set != other
set >= otherissuperset(other) 检测是否 other 中的每个元素都在集合之中。
set > other 检测集合是否为 other 的真超集,即 set >= other and set != other
set | other | ...union(others) 返回一个新集合,其中包含来自原集合以及 others 指定的所有集合中的元素。
set & other & ...intersection(others) 返回一个新集合,其中包含原集合以及 others 指定的所有集合中共有的元素。
set - other - ...difference(others) 返回一个新集合,其中包含原集合中在 others 指定的其他集合中不存在的元素。
set ^ othersymmetric_difference(others) 返回一个新集合,其中的元素或属于原集合或属于 other 指定的其他集合,但不能同时属于两者。
copy() 返回原集合的浅拷贝。

可用于 set 但不可用于 frozenset 的操作

下表中 set代表集合,other代表另一集合。elem代表满足set所有要求的元素。

操作 操作说明
set |= other | ...update(others) 更新集合,添加来自 others 中的所有元素。
set &= other & ...intersection_update(others) 更新集合,只保留其中在所有 others 中也存在的元素。
set -= other | ...difference_update(others) 更新集合,移除其中也存在于 others 中的元素。
set ^= othersymmetric_difference_update(others) 更新集合,只保留存在于集合的一方而非共同存在的元素。
add(elem) 将元素 elem 添加到集合中。
remove(elem) 从集合中移除元素 elem。 如果 elem 不存在于集合中则会引发KeyError
discard(elem) 如果元素 elem 存在于集合中则将其移除。
pop() 从集合中移除并返回任意一个元素。 如果集合为空则会引发KeyError
clear() 从集合中移除所有元素。

映射类型 - 字典(dict)

映射(mapping)类型对象会将可哈希值映射到任意对象。 映射属于可变对象。字典是内置的映射类型。

字典由键值对构成。字典的键(key)可以是任何可哈希值,而值可以是任意对象。

字典的构造方式:

  • 使用花括号内以逗号分隔 键: 值 对的方式: {'jack': 4098, 'sjoerd': 4127} or {4098: 'jack', 4127: 'sjoerd'}
  • 使用字典推导式: {}, {x: x ** 2 for x in range(10)}
  • 使用类型构造器: dict(), dict([('foo', 100), ('bar', 200)]), dict(foo=100, bar=200)

构造过程中:

  • 如果没有给出位置参数,将创建一个空字典。
  • 如果给出一个位置参数并且其属于映射对象,将创建一个具有与映射对象相同键值对的字典。
  • 否则的话,位置参数必须为一个 iterable对象。 该可迭代对象中的每一项本身必须为一个刚好包含两个元素的可迭代对象。 每一项中的第一个对象将成为新字典的一个键,第二个对象将成为其对应的值。
  • 如果一个键出现一次以上,该键的最后一个值将成为其在新字典中对应的值。
  • 如果给出了关键字参数,则关键字参数及其值会被加入到基于位置参数创建的字典。
  • 如果要加入的键已存在,来自关键字参数的值将替代来自位置参数的值。

可用于字典(dict)的操作

d 代表一个字典

操作 操作说明
list(d) 返回字典 d 中使用的所有键的列表。
len(d) 返回字典 d 中的项数。
d[key] 返回 d 中以 key 为键的项。 如果映射中不存在 key 则会引发 KeyError
d[key] = value d[key] 设为 value
del d[key] d[key]d 中移除。 如果映射中不存在 key 则会引发 KeyError
key in d 如果 d 中存在键 key 则返回 True,否则返回 False
key not in d 等价于 not key in d
iter(d) 返回以字典的键为元素的迭代器。 这是 iter(d.keys()) 的快捷方式。
clear() 移除字典中的所有元素。
copy() 返回原字典的浅拷贝。
d | other 合并 dother 中的键和值来创建一个新的字典,两者必须都是字典。当 dother 有相同键时, other 的值优先。
d |= other other 的键和值更新字典 dother 可以是 mappingiterable 的键值对。当 dother 有相同键时, other 的值优先。

ref:
Python 文档:集合类型 set 与 frozenset
Python 文档:映射类型 dict

标签:set,映射,23,元素,other,frozenset,集合,字典
From: https://www.cnblogs.com/wanderoff-night/p/18020652

相关文章

  • 如何让.NET Core支持GB2312和GBK
    在.NETCore中,默认是不支持GB2312和GBK编码的。若果强制使用Encoding.GetEncoding(“GB2312”)的时候会抛出异常。所以在.NETCore中如果我们要使用GB2312和GBK编码,需要给项目引入一个Nuget包:包安装可以使用以下方法来添加System.Text.Encoding.CodePages:VisualStudio......
  • 2023 re:Invent 用 PartyRock 10 分钟构建你的 AI 应用
    前言一年一度的亚马逊云科技的re:Invent可谓是全球云计算、科技圈的狂欢,每次都能带来一些最前沿的方向标,这次也不例外。在看完一些keynote和介绍之后,我也去亲自体验了一些最近发布的内容。其中让我感受最深刻的无疑是PartyRock了。PartyRock真的算是做到了:能让任何人快速......
  • RxJS中高阶映射操作符的全面讲解:switchMap, mergeMap, concatMap (and exhaustMap)
    原文链接:https://blog.angular-university.io/rxjs-higher-order-mapping/有一些在日常开发中常用的RxJS的操作符是高阶操作符:switchMap,mergeMap,concatMap,以及exhaustMap。举个例子,程序中大多数的网络请求都是通过以上某个操作符来完成的,所以为了能够写出几乎所有反应式编程,必须......
  • USACO 2023 DEC bronze
    CandyCaneFeast第一题签到题,依题意模拟即可。注意细节,细节决定成败。CowntactTracing2贪心。读题奶牛传染,每个奶牛每晚传染左边和右边的奶牛。给定一个传染情况,求最开始最少有几个奶牛。我们记k为造成当前传染情况的传染天数。可以知道,传染的天数越多,被传染的牛就越......
  • 集合框架
    集合框架集合框架集合框架被设计成要满足以下几个目标-该框架必须是高性能的,基本集合(动态数组,链表,树,哈希表)的实现也必须是高效的。-该框架允许不同类型的集合,以类似的方式工作,具有高度的互操作性。-对一个集合的扩展和适应必须是简单的。Java集合框架共有三......
  • 中国医疗健康行业2023年关键词盘点及2024年趋势展望
    经历了爆发式、跨越式发展之后,中国医药和医疗健康产业迈入新的发展阶段。2022年,受到资本市场整体下行、医药医疗行业增长放缓等因素影响,医疗健康领域的投融资回归理性,企业估值加速去泡沫化,市场开始自我梳理和审视。中国医药健康赛道创新趋势如何?敬请关注本文关于启明创投主管合伙......
  • Java集合篇之深度解析Queue,单端队列、双端队列、优先级队列、阻塞队列
    写在开头队列是Java中的一个集合接口,之前的文章已经讲解了List和Set,那么今天就来唠一唠它吧。队列的特点:存储的元素是有序的、可重复的。队列的两大接口QueuevsDequeQueue是单端队列,只能从一端插入元素,另一端删除元素,实现上一般遵循先进先出(FIFO)规则。Queue接口抛出......
  • P2357 守墓人
    原题链接题解标准的线段树加上一点点题意转化,注意细节code#definelllonglong#include<bits/stdc++.h>usingnamespacestd;lltree[810000];llwait[810000];inlinevoidread(ll&x){x=0;llflag=1;charc=getchar();while(c<'0'......
  • 「免费普及题」23 普及 1
    便宜没好货。T1U362268题目描述有一个MAR数列,它的定义是这样的:对于每一个\(f_{i}(i>2)\):\(f_i=f_{i-1}\timesf_{i-2}\),并且对于每个\(f_i(i>2)\),需要对\(i\)取模,现在给出\(f_1,f_2\)的值,需要你求出\(f_n\)的值。输入格式三个正整数\(f_1,f_2,n\)。输出格式......
  • P2023 [AHOI2009] 维护序列
    原题链接code#definelllonglong#include<bits/stdc++.h>usingnamespacestd;lltree[410000]={0};llwait_mul[410000]={0};llwait_add[410000]={0};lln,p;inlinevoidread(ll&x){x=0;llflag=1;charc=getchar();while(c......