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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 201,468评论 5 473
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,620评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 148,427评论 0 334
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,160评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,197评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,334评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,775评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,444评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,628评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,459评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,508评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,210评论 3 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,767评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,850评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,076评论 1 258
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,627评论 2 348
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,196评论 2 341

推荐阅读更多精彩内容