Python入门实践13 | 集合(Set)

系统 429 0

Python入门实践13 ——集合(Set)


集合(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() 给集合添加元素
集合(Set)——思维导图
三、步骤

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、版权属于时进军个人,转载需注明。


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请请扫描上面二维码支持博主1元、2元、5元等您想捐的金额吧,狠狠点击下面给点支持吧

发表我的评论
最新评论 总共0条评论