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

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

set具有以下特性:

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

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

Python set基本操作

创建

#调用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))

执行结果为:

·无序无重复元素

集合数学运算并、交、差、对称差操作符

a = t | s          # t 和 s的并集  
b = t & s          # t 和 s的交集
c = t – s          # 求差集(求在t中,但不在s中的元素)  
d = t ^ s          # 对称差集(求在t或s中,但不会同时出现在二者中的元素)  

基本操作

集合本身的增、删

>>>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)方法

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方法

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}

操作符和方法的等价性

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”  

判断

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

转换

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)

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Kevin-ZhangCG

[ Java学习基础 ] Java的抽象类与接口

2376
来自专栏柠檬先生

JavaScript 基础(一)

基本语法: 区分大小写:       ECMAScript 中的一切(变量,函数名和操作符)都区分大小写。 标识符:     表示符就是指,变量,函数,属性...

21710
来自专栏恰童鞋骚年

剑指Offer面试题:3.替换空格

  在网络编程中,如果URL参数中含有特殊字符,如空格、'#'等,可能导致服务器端无法获得正确的参数值。我们需要将这些特殊符号转换成服务器可以识别的字符。转换的...

832
来自专栏Java帮帮-微信公众号-技术文章全总结

开发你不能忽略的问题?JavaScript(JS)

一、JavaScript基础加强 ? JavaScript是在浏览器内容运行,无需编译、解释执行动态脚本语言,是一种弱类型语言,所有变量使用var定义。 Ja...

3248
来自专栏Python研发

JavaScript

JavaScript是一门编程语言,浏览器内置了JavaScript语言的解释器,所以在浏览器上按照JavaScript语言的规则编写相应的代码,浏览器可以解释...

1522
来自专栏Script Boy (CN-SIMO)

Qt Quick编程(1)——QML的核心部分ECMAScript

说道QML,不得不先说一下ECMAScript: ECMAScript语言的标准是由Netscape、Sun、微软、Borland等公司基于JavaScript...

4680
来自专栏desperate633

为什么Java中类的成员变量不能被重写?成员变量在Java中能够被重写么?不会重写成员变量,而是隐藏成员变量访问隐藏域的方法

这篇文章讨论了Java面向对象概念中一个基本的概念--Field Hiding(成员变量隐藏)

1514
来自专栏闻道于事

Java之分支和循环

Java中的分支语句: if语句: if语句的四种写法:   (1)   if(表达式_布尔值) {   ...   }   (2)   if(表达式_布...

3149
来自专栏无所事事者爱嘲笑

正则表达式零宽断言详解(?=,?<=,?!,?<!)

2775
来自专栏一枝花算不算浪漫

[jQuery学习系列二 ]2-JQuery学习二-数组操作

38412

扫码关注云+社区

领取腾讯云代金券