前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python set(集合) 这一定是最全的介绍集合的博文

Python set(集合) 这一定是最全的介绍集合的博文

作者头像
Steve Wang
发布2018-02-05 17:24:36
2.3K0
发布2018-02-05 17:24:36
举报
文章被收录于专栏:从流域到海域从流域到海域

Python的set是一个无序且无重复元素的集合,概念上相当于数学上的无序集,数据结构上相当于dict的键。 既然set是集合,则必然可以实现并、交、差、对称差等集合运算。 set是一组无序排列的可哈希的值,因此可以用作字典中的键。set和之前介绍的list、tuple、dict等一样,可以使用in操作符检查元素是否在集合中存在,使用len()求得集合元素的个数,使用for循环迭代其成员,使用copy()返回一个浅复制。不同之处在于集合本身无序,所以没有索引,就不能实现索引和切片操作。

set具有以下特性:

  • 元素不重复出现
  • 元素必须是不可变对象

你可以把set当作是dict中的键来理解,当然仅仅限于数据结构层面。

Python set基本操作

创建
代码语言:javascript
复制
#调用set方法创建

s = set() #创建空set
a = set('apple') #以字符串创建set
b = set(['p', 'p', 'a', 'l', 'e']) #以list创建set
c = set({'key1':'value1', 'key2':'value2', 'key3': 'value3'}) #以dict创建set

#使用"="创建
d = {'key1', 'key2', 'key3'}
e = {('key1', 'key2', 'key3')} #使用tuple创建

print(a,type(a))
print(b,type(b))
print(c,type(c))
print(d,type(d))
print(e,type(e))

执行结果为:

这里写图片描述
这里写图片描述

·无序无重复元素

集合数学运算并、交、差、对称差操作符
代码语言:javascript
复制
a = t | s          # t 和 s的并集  
b = t & s          # t 和 s的交集
c = t – s          # 求差集(求在t中,但不在s中的元素)  
d = t ^ s          # 对称差集(求在t或s中,但不会同时出现在二者中的元素)  
基本操作
集合本身的增、删
代码语言:javascript
复制
>>>s = set([1, 2, 3, 4])
>>>s
{1, 2, 3, 4}
>>> s.add(5) #增加元素
>>> s
{1, 2, 3, 4, 5}
>>> s.remove(5) #删除元素5
>>> s.discard(4) #删除元素4
>>> s.pop() #移除某个元素(在有序数据集pop方法移除末尾元素,无序数据集则不确定)
>>> 1 
{2, 3}
>>> s.update([1, 4, 5]) #添加多个元素
>>> s
{1, 2, 3, 4, 5}
>>> s.clear() #清空所有元素
>>> s
set() #即空集
集合数学运算之并(union)、交(intrersection) 、差(difference)方法
代码语言:javascript
复制
a = {11, 22, 33}
b = {22, 33, 44}

#并集
t = a.union(b) #取并集
print(t) #{33, 22, 11, 44}

#交集
t1 = a.intersection(b) #取交集
t2 = a.intersection_update #取交集并用交集更新a本身


#差集
box1 = a.difference(b) 
#相当于数学上的集合a - b 即取差集
print(box1) #{11}
print(a) #{33, 11, 22}

box2 = a.difference_update(b) 
#取差集 并用这些元素覆盖a本身
print(box2) #None
print(a) #{11}
集合数学运算之对称差symmetric_difference方法
代码语言:javascript
复制
a = {11, 22, 33}
b = {22}

temp1 = a.symmetric_difference(b)  #合并不同项(求对称差)
print(temp1)    #{33, 11}
print(a)       #{33, 11, 22}

temp2 = a.symmetric_difference_update(b) #合并不同项,并更新a本身
print(temp2)    #None
print(se)       #{33, 11}
操作符和方法的等价性
代码语言:javascript
复制
s.update(t)  
s |= t  
返回增加了 set “t”中元素后的 set “s”  

s.intersection_update(t)  
s &= t  
返回只保留含有 set “t”中元素的 set “s”  

s.difference_update(t)  
s -= t  
返回删除了 set “t”中含有的元素后的 set “s”  

s.symmetric_difference_update(t)  
s ^= t  
返回含有 set “t”或者 set “s”中有而不是两者都有的元素的 set “s”  
判断
代码语言:javascript
复制
a = {11,22, 33}
b = {22, 33}

print(a.isdisjoint(b))        #判断是否不存在交集 False
#请注意, 没有isjoint(判断是否存在交集这种方法)
print(a.issubset(b))          #判断a是否是b的子集合 False
print(a.issuperset(b))        #判断a是否是b的父集合 True
转换
代码语言:javascript
复制
set = set(range(4)) #range(4)方法返回从0到4,不包括4的lsit
list = list(set)
tuple = tuple(set)
str = str(set)

print(type(list), list)
print(type(tuple), tuple)
print(type(str), str)
这里写图片描述
这里写图片描述
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017年12月08日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Python set基本操作
    • 创建
      • 集合数学运算并、交、差、对称差操作符
        • 基本操作
          • 集合本身的增、删
            • 集合数学运算之并(union)、交(intrersection) 、差(difference)方法
              • 集合数学运算之对称差symmetric_difference方法
                • 操作符和方法的等价性
                  • 判断
                    • 转换
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档