python3 第十五章 - 数据类型之Sets(集合)

栏目: Python · 发布时间: 6年前

内容简介:python3 第十五章 - 数据类型之Sets(集合)

python的官网里对集合的描述是:

Python also includes a data type for sets . A set is an unordered collection with no duplicate elements. Basic uses include membership testing and eliminating duplicate entries. Set objects also support mathematical operations like union, intersection, difference, and symmetric difference.

Python还包括用于集合的数据类型。集合是没有重复元素的无序容器。基本用法包括成员资格测试和消除重复条目。集合对象也支持数学运算,如并,交,差和对称差。

特点:

  • 集合是一个无序的,不重复的数据组合
  • 把一个列表变成集合,就自动去重了
  • 关系测试,测试两组数据之前的交集、差集、并集等关系

1、创建

用花括号或者 set() 函数可以用来创建集合。注意,你必须使用 set() 创建一个空的集合,而不能用 {} ,后面这种写法创建一个空的字典

实例:

basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}  # 用花括号的方式创建一个集合

set2 = set('abracadabra')  # 用set()的方式创建一个集合

set3 = set()  # 创建一个空的集合

print(basket)

以上代码,输出:

{'banana', 'orange', 'apple', 'pear'}

细心对照一下,你会发现,自动去除了重复,值得一提的是 显示的顺序并不表示Sets是有序的

2、添加元素

通过add(key)方法可以添加元素到set中,可以重复添加,但不会有效果:

basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}  # 用花括号的方式创建一个集合
print('原来的basket:', basket)

basket.add('apple')  # 添加一个重复的
print('添加一个重复项后:', basket)

basket.add('watermelon')  # 添加一个不重复的
print('添加一个不重复项后:', basket)

以上代码,输出:

原来的basket: {'apple', 'banana', 'pear', 'orange'}
添加一个重复项后: {'apple', 'banana', 'pear', 'orange'}
添加一个不重复项后: {'banana', 'apple', 'watermelon', 'orange', 'pear'}

3、删除元素

可通过remove(key)方法可以删除元素:

basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}  # 用花括号的方式创建一个集合
print('原来的basket:', basket)

basket.remove('apple')  # 删除 'apple'
print('删除 \'apple\':', basket)

以上代码,输出:

原来的basket: {'apple', 'pear', 'banana', 'orange'}
删除 'apple': {'pear', 'banana', 'orange'}

set和dict的唯一区别仅在于没有存储对应的value,但是,set的原理和dict一样,所以,同样不可以放入可变对象,因为无法判断两个可变对象是否相等,也就无法保证set内部“不会有重复元素”。 试试把list放入set,看看是否会报错

set可以看成数学意义上的无序和无重复元素的集合,因此,两个set可以做数学意义上的交集、并集等操作,我们通过实例来演示:

A = {'apple', 'orange',  'pear',  'banana'}  # 用花括号的方式创建一个集合
B = {'apple', 'orange',  'watermelon'}
C = {'apple', 'orange'}
D = {'c++', 'python'}

print('集合A:', A)
print('集合B:', B)

print('A、B的交集:', A.intersection(B))  # 交集
print('A、B的并集:', A.union(B))  # 并集
print('A、B的差集:', A.difference(B))  # 差集 (项在A中,但不在B中)
print('A、B的对称差集:', A.symmetric_difference(B))  # 对称差集(项在A或B中,但不会同时出现在二者中)

# 子集(判断A是否包含了B里面的所有值)
print('B是A的子集?', B.issubset(A))
print('C是A的子集?', C.issubset(A))

# 父集(判断A是否为B的父集)
print('A是B的父集?', A.issuperset(B))
print('A是C的父集?', A.issuperset(C))

# 无交集(判断两个集合是否完全没有任何交集)
print('A与D是否有交集?', A.isdisjoint(D))
print('A与B是否有交集?', A.isdisjoint(B))

print()  # 输出空行
print()  # 输出空行
print('另一种写法')
print('集合A:', A)
print('集合B:', B)

#  另一种写法
print('A、B的交集 => A & B:', A & B)  # 交集
print('A、B的并集 => A | B:', A | B)  # 并集
print('A、B的差集 => A - B:', A - B)  # 差集(项在A中,但不在B中)
print('A、B的对称差集 => A ^ B:', A ^ B)  # 对称差集(项在A或B中,但不会同时出现在二者中)

以上代码,输出:

集合A: {'apple', 'orange', 'pear', 'banana'}
集合B: {'apple', 'orange', 'watermelon'}
A、B的交集: {'apple', 'orange'}
A、B的并集: {'apple', 'watermelon', 'pear', 'orange', 'banana'}
A、B的差集: {'pear', 'banana'}
A、B的对称差集: {'watermelon', 'pear', 'banana'}
B是A的子集? False
C是A的子集? True
A是B的父集? False
A是C的父集? True
A与D是否有交集? True
A与B是否有交集? False


另一种写法
集合A: {'apple', 'orange', 'pear', 'banana'}
集合B: {'apple', 'orange', 'watermelon'}
A、B的交集 => A & B: {'apple', 'orange'}
A、B的并集 => A | B: {'apple', 'watermelon', 'pear', 'orange', 'banana'}
A、B的差集 => A - B: {'pear', 'banana'}
A、B的对称差集 => A ^ B: {'watermelon', 'pear', 'banana'}

以上所述就是小编给大家介绍的《python3 第十五章 - 数据类型之Sets(集合)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

C语言编程:一本全面的C语言入门教程(第三版)

C语言编程:一本全面的C语言入门教程(第三版)

(美)Stephen Kochan / 张小潘 / 电子社博文视点资讯有限公司 / 2006年 / 59.00元

本书是极负盛名的C语言入门经典教材,其第一版发行至今已有20年的历史。本书内容详实全面,由浅入深,示例丰富,并在每个章节后面附有部分习题,非常适合读者自学使用。除此之外,《C语言编程》一书对于C语言标准的最新进展、C语言常见开发工具以及管理C语言大型项目等重要方面,也进行了深入浅出的说明。一起来看看 《C语言编程:一本全面的C语言入门教程(第三版)》 这本书的介绍吧!

URL 编码/解码
URL 编码/解码

URL 编码/解码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

html转js在线工具
html转js在线工具

html转js在线工具