23 - 集合与映射类型

这篇具有很好参考价值的文章主要介绍了23 - 集合与映射类型。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

集合与映射类型

集合类型(Set Type)

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

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

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

set 和 frozenset 的构建方式:

  • 使用花括号内以逗号分隔元素的方式: {'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对象。

集合类型通用操作 (可用于 set 和 frozenset)

下表中 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 可以是 mapping 或 iterable 的键值对。当 dother 有相同键时, other 的值优先。

ref:
Python 文档:集合类型 set 与 frozenset
Python 文档:映射类型 dict
文章来源地址https://www.toymoban.com/news/detail-833893.html

到了这里,关于23 - 集合与映射类型的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【前端进阶】-TypeScript高级类型 | 交叉类型、索引签名类型、映射类型

    前言 博主主页👉🏻蜡笔雏田学代码 专栏链接👉🏻【TypeScript专栏】 上篇文章讲解了TypeScript部分高级类型 详细内容请阅读如下:🔽 【前端进阶】-TypeScript高级类型 | 类的初始化、构造函数、继承、成员可见性 今天来学习TypeScript另外一些高级类型! 感兴趣的小伙伴一起来

    2023年04月08日
    浏览(35)
  • sql数据类型映射与数据类型转换

    –odps sql – – –author:宋文理 –create time:2023-03-09 09:36:05 – – – MaxCompute与Hive、Oracle、MySQL的数据类型映射表,如下所示。 MaxCompute数据类型 Hive数据类型 Oracle数据类型 MySQL数据类型 BOOLEAN BOOLEAN 无(说明一) 无(说明二) TINYINT TINYINT NUMBER(3,0) TINYINT SMALLINT SMALLINT NUMBER(5,0) SMALLIN

    2024年02月08日
    浏览(39)
  • TypeScript 学习笔记(六):索引签名类型、映射类型

    keyof 可以用于获取某种类型的所有键,其返回类型是联合类型。 keyof 与 Object.keys 略有相似,只不过 keyof 取 interface 的键 通过例子可以看到,这里的keyof Info其实相当于\\\"name\\\" | “age”。通过和泛型结合使用,TS 就可以检查使用了动态属性名的代码: 接口 基本数据类型 类 如果

    2024年02月17日
    浏览(43)
  • Rust 笔记:Rust 语言中哈希结构(哈希映射,HashMap)、集合(哈希集,HashSet)及其使用

    Rust 笔记 Rust 语言中映射(HashMap)与集合(HashSet)及其用法 作者 : 李俊才 (jcLee95):https://blog.csdn.net/qq_28550263?spm=1001.2101.3001.5343 邮箱 : 291148484@163.com 本文地址 :https://blog.csdn.net/qq_28550263/article/details/130876735 【介绍】:本文介绍 Rust 中哈希结构相关概念及其使用。在 R

    2024年02月09日
    浏览(50)
  • 49天精通Java,第23天,Java集合,Collection接口,Iterator接口

    大家好,我是哪吒。 在Java类库中,集合类的基类是Collection接口。

    2023年04月11日
    浏览(41)
  • Elasticsearch删除映射类型

    官方解释:https://www.elastic.co/guide/en/elasticsearch/reference/6.0/removal-of-types.html 在elasticsearch6.0.0或更高的版本中创建索引仅能包含单个映射类型。在具有多种映射类型的5.x版本中创建的索引将继续像以前一样在elasticsearch6.x中运行。类型将在elasticsearch7.0.0中的API中弃用,并在8.0.0中完

    2024年02月06日
    浏览(36)
  • Elasticsearch映射与字段类型

    Elasticsearch映射与字段类型 Elasticsearch是一个分布式、实时的搜索和分析引擎,基于Lucene库构建。它可以快速、高效地索引、搜索和分析大量数据。在Elasticsearch中,数据以文档的形式存储,每个文档都有一个唯一的ID。文档可以存储在一个索引中,索引可以存储在一个集群中。

    2024年02月22日
    浏览(61)
  • ElasticSearch第八讲 ES索引字段映射类型以及动态映射相关操作

    ES的映射:映射就是 Mapping,它用来定义一个文档以及文档所包含的字段该如何被存储和索引。所以,它其实有点类似于关系型数据库中表的定义。其中ES中映射可以分为动态映射和静态映射,静态映射就是提前创建好对应字段文档映射关系,如果插入的类型不对会出错,而动

    2024年02月10日
    浏览(45)
  • Elasticsearch的数据类型与映射

    Elasticsearch是一个分布式、实时的搜索和分析引擎,它可以处理大量数据并提供快速、准确的搜索结果。在Elasticsearch中,数据类型和映射是两个重要的概念,它们在存储和查询数据时起着关键的作用。本文将深入探讨Elasticsearch的数据类型与映射,揭示其核心概念、算法原理、

    2024年02月19日
    浏览(35)
  • Redis - 数据类型映射底层结构

    从数据类型上体现就是,同一个数据类型,在不同的情况下会使用不同的编码类型,底层所使用的的数据结构也不相同。 字符串对象的编码可以是 int 、 raw 和 embstr 三者之一。 embstr 编码是专门用于保存简短字符串的一种优化编码方式,与 raw 编码会调用两次内存分配函数分

    2023年04月21日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包