集合(set)

4.6 集合(set)

集合是由不重复元素组成的无序容器。集合中的元素不能重复,即使向集合中再添加同样的元素,也只会保留一个。由于集合的这种特性,所以一般可以用集合进行去重。
集合中不能添加可变对象(不可哈希),因为无法判断两个可变对象是否相同,也就无法保证集合的内部不会有重复元素。
集合中的元素是无序的,我们通过print可以显示集合内的元素,但是显示的结果并非是集合中的元素的顺序。这意味着集合不能通过索引或切片获取内部的元素。

4.6.1 集合的创建

4.6.1.1 通过集合标识符号创建

列表在创建的时候用{}做标识。内部的元素用逗号进行分隔。
>>> st = {1} # 仅一个元素的集合
>>> st2 = {'a', 'b', 'c'} # 集合中存放的全是字符
>>> st3 = {1, 'a', '中'} # 集合中存放混合数据
>>> st4 = {'red', 'green', 'blue'} # 集合中存放的全是字符串

4.6.1.2 通过集合推导式创建

>>> {x for x in range(5)}

>>> {x * x for x in range(10)}

>>> {x*x for x in range(10) if x % 3 == 0}

4.6.1.3 通过set函数创建

set函数可以将一个可迭代对象转换成集合。如果可迭代对象中有重复的元素则会自动去除保留一个。
>>> print(set('Pythonn')) # 只会保留一个n

{'P', 'y', 't', 'h', 'o', 'n'}
>>> set() # 创建空的集合
{}

注意:不能通过st = {}创建空集合,因为这样会创建空的字典。

4.6.1.4 通过frozenset函数创建

set函数可以创建一个普通的集合(可以修改),但是通过frozenset函数创建的集合是一个不可修改的集合,创建后就不能再修改里面的元素,包括增加、删除、清空等。
>>> st = frozenset('python')
>>> st

frozenset({'o', 't', 'p', 'h', 'y', 'n'})

>>> st.add('l')

Traceback (most recent call last):
File "C:\Program Files\Python3102\lib\code.py", line 90, in runcode
exec(code, self.locals)
File "", line 1, in
AttributeError: 'frozenset' object has no attribute 'add'

4.6.2 集合的访问

4.6.2.1 遍历集合

参见可迭代对象章节中的可迭代对象的遍历

4.6.2.2 成员资格检查

参见可迭代对象中的成员资格检查

4.6.3 集合的运算

4.6.3.1 并集(返回两个集合所有的元素的集合)

>>> st1 = {1, 2, 3, 4, 5}
>>> st2 = {2, 4, 6, 8, 10}
>>> st1 | st2

4.6.3.2 交集(返回两个集合都有的元素的集合)

>>> st1 = {1, 2, 3, 4, 5}
>>> st2 = {2, 4, 6, 8, 10}
>>> st1 & st2

4.6.3.3 差集(返回前者集合有而后者没有的元素的集合)

>>> st1 = {1, 2, 3, 4, 5}
>>> st2 = {2, 4, 6, 8, 10}
>>> st1 - st2

4.6.3.4 对称差(返回不同时在2个集合中的元素的集合)

>>> st1 = {1, 2, 3, 4, 5}
>>> st2 = {2, 4, 6, 8, 10}
>>> st1 - st2

4.6.4 集合的关系

A < B # 返回A是否是B的子集(同:A.issubset(B))
A > B # 返回A是否是B的超集(同:A.issuperset(B))

4.6.5 集合的方法

4.6.5.1 添加元素

4.6.5.1.1 add(x)

描述
为集合添加元素
示例
>>> st = {1, 2}
>>> st.add(3)
>>> st

4.6.5.1.2 update(x)

描述
添加新的元素或集合到当前集合中。
示例
>>> st1 = {1, 2, 3, 4, 5}
>>> st2 = {2, 4, 6, 8, 10}
>>> st1.update(st2)
>>> st1

4.6.5.2 删除元素

4.6.5.2.1 remove(x)

描述
指定删除集合中的元素。要删除的元素必须在目标集合中存在,否则引发KeyError异常。
示例
>>> st1 = {1, 2, 3}
>>> st1.remove(2)
>>> st1

4.6.5.2.2 discard()

描述
删除集合中指定的元素。如果要删除的元素不在目标集合中则不起任何作用。
示例
>>> st1 = {1, 2, 3, 4, 5}
>>> st1.discard(2)
>>> st1

4.6.5.2.3 pop()

描述
随机删除集合中的一个元素
示例
>>> st1 = {1, 2, 3}
>>> st1.pop()

1

>>> st1

4.6.5.2.4 clear()

描述
移除集合中的所有元素
示例
>>> st = {1, 2}
>>> st.clear()
>>> st

{}

4.6.5.3 查询统计类

4.6.5.3.1 union(x)

描述
返回两个集合的并集。
示例
>>> st1 = {1, 2, 3, 4, 5}
>>> st2 = {2, 4, 6, 8, 10}
>>> st1.union(st2)

4.6.5.3.2 intersection()、intersection_update()

描述
返回多个集合的交集。intersection不修改原对象内容,直接返回结果,而intersection_update会修改原对象内容。
示例
>>> st1 = {1, 2, 3, 4, 5}
>>> st2 = {2, 4, 6, 8, 10}
>>> st1.intersection(st2)

4.6.5.3.3 difference()、difference_update()

描述
返回多个集合的差集。difference不修改原对象内容,直接返回结果,而difference_update会修改原对象内容。
示例
>>> st1 = {1, 2, 3}
>>> st2 = {2, 4, 6}
>>> st1.difference(st2)

4.6.5.3.4 symmetric_difference()、symmetric_difference_update()

描述
返回两个集合中不重复的元素的集合(对称差)。symmetric_difference不修改原对象内容,直接返回结果,而symmetric_difference_update会修改原对象内容。
示例
>>> st1 = {1, 2, 3, 4, 5}
>>> st2 = {2, 4, 6, 8, 10}
>>> st1.symmetric_difference(st2)

4.6.5.3.5 issubset()、issuperset()

描述
判断前者集合是否是后者集合的子集(超集),如果为真,则返回True,否则返回False。
示例
>>> st1 = {1, 2}
>>> st2 = {1, 2, 4}
>>> st1.issubset(st2)

True

4.6.5.3.6 isdisjoint()

描述
判断两个集合是否不相交(即不含有相同元素),如果不相交则返回True,否则返回False。
示例
>>> st1 = {1, 2}
>>> st2 = {2, 4}
>>> st3 = {3, 6}
>>> st1.isdisjoint(st2)
>>> st1.isdisjoint(st3)

False
True

4.6.5.4 其它类

4.6.5.4.1 copy()

描述
拷贝一个集合
示例
>>> st = {1, 2, 3}
>>> st2 = st.copy()
>>> st2

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:集合(set) - Python技术站

(0)
上一篇 2023年4月2日
下一篇 2023年4月2日

相关文章

  • 文档字符串

    5.5 文档字符串 开发者在编写函数或模块时不光要自己能看懂,在和他人合作共同开发或者被他人调用时也需要他人也能看懂。这个时候就可以为自己编写的函数、模块或者类添加相应的文档字符串(docstring)进行说明了。一般的,如果想要在模块中添加模块文档字符串,则需要在模块的最上方用3个双引号引住内容,这部分内容则自动会被识别为模块的文档字符串。注意:模块文档字…

    Python开发 2023年3月31日
    00
  • Python代码块及输入输出

    3.7 Python代码块及输入输出 3.7.1 Python代码块 前面分别介绍了关键字、运算符,由运算符和操作数组成了表达式。而语句由关键字、标识符、表达式组成。而代码块由若干条语句组成。通常Python中的代码块是通过缩进来创建的。在很多语言中,都使用一个特殊的单词或字符,比如begin或{来标识代码块的起始位置,并使用另一个特殊的单词或字符,如end…

    Python开发 2023年4月2日
    00
  • 类相关函数(反射机制)

    6.5 类相关函数(反射机制) 在 Python 中使用反射可以得到对象的属性,即:反过来让对象告诉我们他的相关信息是什么,用于实现在运行时获取对象的相关信息。Python中有几个内置方法,可以用来检查或是访问对象的属性。这些方法可以用于任意对象。 6.5.1 dir([obj]) 描述不带参数时,返回当前范围内的变量、方法和定义的类型列表;带参数时,返回参…

    Python开发 2023年3月31日
    00
  • Python复合语句

    3.6 Python复合语句 复合语句是包含其它语句(语句组)的语句;它们会以某种方式影响或控制所包含其它语句的执行。通常,复合语句会跨越多行,虽然在某些简单形式下整个复合语句也可能包含于一行之内。if、while和for语句用来实现传统的控制流程构造。try语句为一组语句指定异常处理和/和清理代码,而with语句允许在一个代码块周围执行初始化和终结化代码。…

    Python开发 2023年4月2日
    00
  • 常用库

    2.4 常用库 2.4.1 time 时间的访问和转换 该模块提供了各种与时间相关的函数。相关功能还可以参阅 datetime 和 calendar 模块。 2.4.2 datetime 基本日期和时间类型 datetime 模块提供用于处理日期和时间的类。 2.4.3 calendar 日历相关函数 这个模块让你可以输出像 Unix cal 那样的日历,它…

    Python开发 2023年4月2日
    00
  • 函数的特殊使用方式

    5.4 函数的特殊使用方式 5.4.1 匿名函数 所谓匿名函数,即不再使用def语句这样标准形式定义的函数。Python中可以使用lambda关键字来创建匿名函数。用lambda创建的匿名函数的函数体比def定义的函数体要简单。语法如下: lambda [参数1[,参数2],….参数n]]:表达式 lam_sum = lambda arg1, arg2:…

    Python开发 2023年4月2日
    00
  • 可迭代对象

    4.9 可迭代对象 Python中有6种基本的数据类型,除了数字类型,其它5种类型都是可迭代对象。掌握可迭代对象的特性和方法是非常有必要的。 4.9.1 可迭代(iterable)、可迭代对象 4.9.1.1 相关概念 迭代(遍历)就是按照某种顺序逐个访问对象中的每一项。Python中有很多对象都是可以通过for语句来直接遍历的,例如list、string、…

    Python开发 2023年4月2日
    00
  • 类方法和对象方法

    6.4 类方法和对象方法 方法的本质其实就是函数,在模块中定义就是函数,在类中定义就是类的方法。方法按照归属分类一般有3种:对象方法、类方法、静态方法。 6.4.1 对象方法 class Person: cls_attr = ‘我是类属性’ def __init__(self): self.obj_attr = ‘我是对象属性’ def eat(self):…

    Python开发 2023年3月31日
    00
合作推广
合作推广
分享本页
返回顶部