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

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

内容简介: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'}
AB的交集: {'apple', 'orange'}
AB的并集: {'apple', 'watermelon', 'pear', 'orange', 'banana'}
AB的差集: {'pear', 'banana'}
AB的对称差集: {'watermelon', 'pear', 'banana'}
BA的子集? False
CA的子集? True
AB的父集? False
AC的父集? True
AD是否有交集? True
AB是否有交集? False


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

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

查看所有标签

猜你喜欢:

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

以奋斗者为本

以奋斗者为本

黄卫伟 / 中信出版社 / 2014-11-1 / 68.00元

《以奋斗者为本:华为公司人力资源管理纲要》传承于《华为公司基本法》,华为管理层25年人力资源管理思想精髓,5年整理,华为公司内训教材,首次大公开!作为华为公司内部培训教材,原汁原味,是继《华为基本法》之后华为的标志性著作,对国内外企业管理者&研究者具有高度的研究及借鉴价值。《以奋斗者为本:华为公司人力资源管理纲要》由华为公司首席管理科学家主编,华为高管及顾问参与编著,华为管理层25年实践,权威出品......一起来看看 《以奋斗者为本》 这本书的介绍吧!

MD5 加密
MD5 加密

MD5 加密工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具