Python入门实践13 ——集合(Set)
一、目标
1、掌握集合是存放一组没有顺序、不可可重复的、可以改变的数据的容器。
2、掌握集合的操作。
二、要点
1、 集合(set)
可以存放一组没有顺序、不可可重复的、可以改变的数据。
所以一般情况下集合常用的两个场景是:去重(如:列表去重);关系测试(如:取交集、取并集、取差集等)。
- 集合可以通过可迭代对象(字符串、元组、列表等)进行创建;
- 集合中的元素不可重复;
- 集合中的元素无序排列。
2、创建集合
集合可以使用大括号 { } 或者set(iterable)方法创建,参数iterable为可迭代对象。
注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。
如:
basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'};
s1 = set('好好学习天天想上') # 将字符串分解为单个字符,作为集合的元素创建集合
s2 = set(('好好', '学习', '天天', '想上')) # 将元组分解为单个元素,作为集合元素创建集合
s3 = set(['好好', '学习', '天天', '想上']) # 将列表分解为单个元素,作为集合元素创建集合
3、集合操作
1)、添加元素
(1)、添加单个元素s.add(element)
语法格式如下:
s.add(element);
参数element为集合允许添加的元素(例如数字、字符串、元组等)。
如:
s1.add('4')
(2)、添加多个元素s.update(iterable)
语法格式如下:
s.update(iterable)
参数iterable为可迭代对象,可以是列表,元组,字典等。
如:
s2.update(['4','5','6']) ;
2)、移除元素:
(1)、s.remove( element)
将元素 element 从集合 s 中移除,如果元素不存在,则会发生错误 。
(2)、s.discard( element ):
将元素 element 从集合 s 中移除,如果元素不存在,不会发生错误,但什么也不做 。
(3)、s.pop():
从集合中随机删除一个元素,并返回删除的元素 。
3)、计算集合中元素的个数
len(s):计算集合 s 元素个数。
4)、清空集合
s.clear():清空集合s中的元素
5)、移除集合
del s:移除集合s
6)、判断元素是否在集合中
x in s :判断元素 x是否在集合 s中存在,存在返回 True,不存在返回 False。
7)、交集/并集/补集/差集
操作 | 函数 | 说明 | |
---|---|---|---|
交集 | & | s1.intersection(s2)不更新s1 s1.intersection_update(s2)更新s1 | 获取两个集合中共有元素 |
并集 | | | s1.union(s2) | 获取两个集合去除重复元素后的全部元素 |
补集 | - | s1.difference(s2) 不更新s1 s1.difference_update(s2) 更新s1 | 获取当前集合去除与另一集合交集元素后的全部元素。 |
差集 | ^ | s1.ymmetric_difference(s2) 不更新s1 s1.symmetric_difference_update(s2) 更新s1 | 获取两个集合去除交集元素后的全部元素。 |
8)、成员关系
Python中提供了一些方法,
- 判断一个集合中是否包含某一元素;
- 判断一个集合是否另一个集合的子集或超集。
- 判断一个集合与另一个集合是否没有交集。
操作 | 描述 |
---|---|
In | 来判断操作符前方的值是否被后方的序列包含(成员关系) |
not in | 判断操作符前方的值是否未被后方的序列包含(非成员关系)。 |
isdisjoint(set) | 可以判断集合是否与指定集合不存在交集,参数set为集合;如果成立返回结果为True,否则为False。 |
issubset(set) | 可以判断集合是否指定集合的子集,参数set为集合;如果成立返回结果为True,否则为False。 |
issuperset(set) | 可以判断集合是否指定集合的超集,参数set为集合;如果成立返回结果为True,否则为False。 |
9)、复制集合
使用copy()方法能够对集合进行复制。
4、集合内置方法
方法 | 描述 |
---|---|
add() | 为集合添加元素 |
clear() | 移除集合中的所有元素 |
copy() | 拷贝一个集合 |
difference() | 返回多个集合的差集 |
difference_update() | 移除集合中的元素,该元素在指定的集合也存在。 |
discard() | 删除集合中指定的元素 |
intersection() | 返回集合的交集 |
intersection_update() | 返回集合的交集。 |
isdisjoint() | 判断两个集合是否包含相同的元素,如果没有返回 True,否则返回 False。 |
issubset() | 判断指定集合是否为该方法参数集合的子集。 |
issuperset() | 判断该方法的参数集合是否为指定集合的子集 |
pop() | 随机移除元素 |
remove() | 移除指定元素 |
symmetric_difference() | 返回两个集合中不重复的元素集合。 |
symmetric_difference_update() | 移除当前集合中在另外一个指定集合相同的元素,并将另外一个指定集合中不同的元素插入到当前集合中。 |
union() | 返回两个集合的并集 |
update() | 给集合添加元素 |
三、步骤
1、新建新建ex13.py文件。
2、录入实例中代码。
3、运行。
四、实例(Python 3.0+)
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
__title__ = ''
__author__ = 'jungle'
__mtime__ = '2019-08-28'
"""
basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
print(basket);
s1 = set('好好学习天天想上') ; # 将字符串分解为单个字符,作为集合的元素创建集合
s2 = set(('好好', '学习', '天天', '想上')); # 将元组分解为单个元素,作为集合元素创建集合
s3 = set(['好好', '学习', '天天', '想上']) ; # 将列表分解为单个元素,作为集合元素创建集合
print (s1); # 显示输出结果为:{'好', '习', '上', '天', '想', '学'}
print (s2) ; # 显示输出结果为:{'好好', '想上', '学习', '天天'}
print (s3); # 显示输出结果为:{'好好', '想上', '学习', '天天'}
# 添加单个元素
s1.add('4');
# 添加多个元素
s2.update(['4','5','6']); # 添加列表到集合,列表元素会被分解为单个元素后添加到集合
s3.update('de') ; # 添加字符串到集合,字符串会被分解为单个元素后添加到集合
# 显示输出
print (s1) ;
print (s2) ;
print (s3) ;
# 创建集合
s1 = set(['Python','Java','C','C++','C#'])
s2 = set(['Python','Java','C','C++','C#'])
# 删除元素
s1.remove('C++');
s2.discard('C++');
print (s1) ;
print (s2) ;
print (s1.pop()) # 取出集合元素
# 创建集合
s1 = set('Python')
s2 = set('PyCharm')
# 交集操作:获取两个集合中共有元素。
print (s1 & s2) # 显示输出结果为:{'y', 'P', 'h'}
print (s1.intersection(s2)) # 显示输出结果为:{'y', 'P', 'h'}
# 并集操作:获取两个集合去除重复元素后的全部元素。
print (s1 | s2) # 显示输出结果为:{'y', 'a', 'C', 'o', 'P', 'n', 't', 'm', 'r', 'h'}
print (s1.union(s2)) # 显示输出结果为:{'y', 'a', 'C', 'o', 'P', 'n', 't', 'm', 'r', 'h'}
# 补集操作:获取当前集合去除与另一集合交集元素后的全部元素。
print (s1 - s2) # 显示输出结果为:{'o', 't', 'n'}
print (s1.difference(s2)) # 显示输出结果为:{'o', 't', 'n'}
print (s2 - s1) # 显示输出结果为:{'m', 'a', 'r', 'C'}
print (s2.difference(s1)) # 显示输出结果为:{'m', 'a', 'r', 'C'}
# 差集操作:获取两个集合去除交集元素后的全部元素。
print (s1 ^ s2) # 显示输出结果为:{'o', 't', 'm', 'a', 'r', 'n', 'C'}
print (s1.symmetric_difference(s2)) # 显示输出结果为:{'o', 't', 'm', 'a', 'r', 'n', 'C'}
s1 = set('好好学习')
s2 = set('天天想上')
s3 = set('好好学习天天想上')
print ('好' in s1) # 显示输出结果为:True
print ('好' not in s2) # 显示输出结果为:True
print (s1.isdisjoint(s2)) # 显示输出结果为:True
print (s1.issubset(s3)) # 显示输出结果为:True
print (s3.issuperset(s1)) # 显示输出结果为:True
a = set('小楼一夜听春语') # 创建集合存入变量a
b = a # 创建变量b引用变量a的集合
c = a.copy() # 创建变量c复制变量a的值
print (a) # 显示输出结果为:{'春', '夜', '楼', '听', '语', '小', '一'}
print (b) # 显示输出结果为:{'春', '夜', '楼', '听', '语', '小', '一'}
print (c) # 显示输出结果为:{'春', '夜', '楼', '听', '语', '小', '一'}
print(dir(set));
五、运行输出:
{'banana', 'pear', 'orange', 'apple'}
{'学', '上', '想', '天', '好', '习'}
{'天天', '想上', '学习', '好好'}
{'天天', '想上', '学习', '好好'}
{'学', '上', '想', '天', '好', '习', '4'}
{'天天', '想上', '学习', '5', '6', '4', '好好'}
{'天天', '想上', 'e', '学习', 'd', '好好'}
{'C', 'Java', 'Python', 'C#'}
{'C', 'Java', 'Python', 'C#'}
C
{'y', 'h', 'P'}
{'y', 'h', 'P'}
{'o', 'r', 'h', 'm', 'C', 'n', 't', 'P', 'a', 'y'}
{'o', 'r', 'h', 'm', 'C', 'n', 't', 'P', 'a', 'y'}
{'t', 'o', 'n'}
{'t', 'o', 'n'}
{'m', 'C', 'a', 'r'}
{'m', 'C', 'a', 'r'}
{'o', 'r', 'm', 'C', 'n', 't', 'a'}
{'o', 'r', 'm', 'C', 'n', 't', 'a'}
True
True
True
True
True
{'楼', '一', '小', '夜', '听', '语', '春'}
{'楼', '一', '小', '夜', '听', '语', '春'}
{'听', '春', '楼', '一', '语', '小', '夜'}
['__and__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__iand__', '__init__', '__init_subclass__', '__ior__', '__isub__', '__iter__', '__ixor__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__or__', '__rand__', '__reduce__', '__reduce_ex__', '__repr__', '__ror__', '__rsub__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__xor__', 'add', 'clear', 'copy', 'difference', 'difference_update', 'discard', 'intersection', 'intersection_update', 'isdisjoint', 'issubset', 'issuperset', 'pop', 'remove', 'symmetric_difference', 'symmetric_difference_update', 'union', 'update']
注:
1、撰写内容来源于个人收集的文献,属学术探究范畴。
2、版权属于时进军个人,转载需注明。