8、集合Set

本文介绍了Python集合Set的特点,包括其无序性、不可变元素的要求,以及用于去重和关系测试的功能。讲解了如何创建集合,如使用大括号、set()函数以及集合推导式。此外,详细阐述了集合的运算,如交集、并集、补集等,并列出了各种集合方法,如add、update、remove等。最后提到了固定集合frozenset,它是不可变的集合类型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、集合特点

  • 1.1、集合(set)是一个无序不重复元素序列。
  • 1.2、集合时无序的存储结构,元素没有先后关系
  • 1.3、元素必须是不可变对象
  • 1.4、相当于只有键,没有值的字典
  • 1.5、主要用于去重(一个列表变集合就去重了,和关系测试(关系测试:判断数据是否存在 交集,并集,差集  等关系)

2、集合的创建

  • 2.1 非空集合 --使用大括号 { } 或者 set(Iterator) 函数
#1、使用{}创建
fruit = {"apple","banana","orange"}
#2、使用set(可迭代对象)
language = set("python")
#运行结果:{'o', 'p', 'y', 'h', 'n', 't'}

list1 = ["java","python","php"]
set1 = set(list1)
print(set1)
#运行结果:{'php', 'python', 'java'}
  • 2.2 创建一个空集合必须用 set()  备注:不能是 { },因为 { } 是用来创建一个空字典。
#创建空集合
set1 = set()
#运行结果:set()
  • 2.3 集合推导式来创建集合 
  • 语法:{表达式 for 变量 in 可迭代对象 [if  真值表达式]}
#利用集合推导式创建
set1 = {x**2 for x in range(10)}
print(set1)

#运行结果:{0, 1, 64, 4, 36, 9, 16, 49, 81, 25}

3、集合的运算

  • 交集:&  并集:|  补集: -  对称补集: ^  子集:<  超集:>  相同:==  不同:!=  

 

               

#集合的运算
s = {1,2,3,4,5}
s1 = {1,2,3}
s2 = {3,4,5,6,7}

#交集 & 两个集合共同部分。
s3 = s & s2
#运行结果:{3, 4, 5}

#并集 | 连个集合所有。
s3 = s | s2
#运行结果:{1, 2, 3, 4, 5, 6, 7}

#补集 - 存在于集合1中,但不属于集合2.
s3 = s - s2
#运行结果:{1, 2}

#对称补集 ^ 出去共有部分,省下的。
s3 = s ^ s2
#运行结果:{1, 2, 6, 7}

#子集 <
s3 = s < s1 #判断s是s1的子集吗?
#运行结果:False

#超集 >
s3 = s > s1 #判断s是s1的超集吗?
#运行结果:True

#集合相同 ==
s3 = s1 == s2 #判断s1和s2相同吗?
#运行结果:False

#集合不同 !=
s3 = s != s1 #判断集合不等吗?
#运行结果:True

4、集合的方法

  • 添加    s.add(x)  将元素 x 添加到集合 s 中,如果元素已存在,则不进行任何操作。
  •            s.update()   参数可以是列表,元组,字典,  x 可以有多个,用逗号分开。
#集合的添加
set1 = {"java","c++","PHP"}
#add方法
set1.add("python")
#update方法
set1.update("c") #单个
set1.update([1,2],["Html"]) #多个,列表
print(set1)
  • 删除    s.remove(x)    将元素 x 从集合 s 中移除,如果元素不存在,则会发生错误。
  •            s.discard(x)    如果元素不存在,不会发生错误。
  •            s.pop()           随机的删除一个元素,并返回被删除值
  •            s.clear()          移除集合所有值。
#1、集合的删除remove()
set1 = {"java","python","php"}
set1.remove("java")
运行结果:{'python', 'php'}

set1.remove("c++")
运行结果:当不存在时
Traceback (most recent call last):
  File "C:\Users\Administrator\Documents\Aptana Studio 3 Workspace\test\day_5_31.py", line 3, in <module>
    set1.remove("c++")
KeyError: 'c++'

#2、删除discard
set1 = {"java","python","php"}
set1.discard("java")
set1.discard("c++")
print(set1)
运行结果:{'python', 'php'}


#3、随机删除,返回值。
set1 = {"java","python","php"}
s = set1.pop()
print(s)
运行结果:php(随机的)
  • 集合运算    交集 set.intersection(set1, set2 ... etc)  用于返回两个或更多集合中都包含的元素,即交集返回新的集合
  •                          set.intersection_update(set1, set2 ... etc)  在原始的集合上移除不重叠的元素
  •                  并集  set.union(set1, set2...) 方法返回两个集合的并集
  •                  补集(又叫差集)set.difference(set) 返回的集合元素包含在第一个集合中,但不包含在第二个集合(方法的参数)中。
  •                           set.difference_update(set) 同上 ,直接在原来的集合中移除元素,没有返回值。
  •                  对称补集  set.symmetric_difference(set) 返回两个集合中不重复的元素集合。
  •                           set.symmetric_difference_update(set)  同上,没有返回值。
  •                  子集  set.issubset(set)  判断指定集合是否为该方法参数集合的子集。 返回True,False
  •                  超集  set.issuperset(set) 判断该方法的参数集合是否为指定集合的子集。返回True,False
#intersection方法,返回一个新的集合。
x = {"apple", "banana", "cherry"}
y = {"google", "runoob", "apple"}
z = x.intersection(y) 
print(z)
运行结果:{'apple'}

#intersection,在原有的集合上更新。
x = {"apple", "banana", "cherry"}
y = {"google", "runoob", "apple"}
x.intersection_update(y) 
print(x)
运行结果:{'apple'}

#并集 union()
x = {"apple", "banana", "cherry"}
y = {"google", "runoob", "apple"}
z = x.union(y) 
print(z)
运行结果:{'cherry', 'runoob', 'google', 'banana', 'apple'}


#补集(差集) difference
x = {"apple", "banana", "cherry"}
y = {"google", "microsoft", "apple"}
z = x.difference(y) 
print(z)
运行结果:{'cherry', 'banana'}

#补集 difference_update()
x = {"apple", "banana", "cherry"}
y = {"google", "microsoft", "apple"}
x.difference_update(y) 
print(x)
运行结果:{'cherry', 'banana'}

#对称补集 symmetric_difference
x = {"apple", "banana", "cherry"}
y = {"google", "runoob", "apple"}
z = x.symmetric_difference(y) 
print(z)
运行结果:{'google', 'cherry', 'banana', 'runoob'}

#对称补集 symmetric_difference_update 无返回值
x = {"apple", "banana", "cherry"}
y = {"google", "runoob", "apple"}
x.symmetric_difference_update(y) 
print(x)
运行结果:{'google', 'cherry', 'banana', 'runoob'}

#子集 issuperset()
x = {"a", "b", "c"}
y = {"f", "e", "d", "c", "b", "a"}
z = x.issubset(y) 
print(z)
运行结果:True

#超集 issuperset()
x = {"f", "e", "d", "c", "b", "a"}
y = {"a", "b", "c"}
z = x.issuperset(y) 
print(z)
运行结果:True
  • 其他   set.isdisjoint(set)   判断两个集合是否包含相同的元素,如果没有返回 True,否则返回 False。
  •           set.copy(set) 用于拷贝一个集合
  • 内建函数          len(set)  max(set) min(set) sum(set) any(set) all(set)
  •           x  in(not in)  set  判断元素 x 是否在集合 set 中,存在返回 True,不存在返回 False。
    #判断有没有相同元素  isdisjoint()
    x = {"apple", "banana", "cherry"}
    y = {"google", "runoob", "facebook"}
    z = x.isdisjoint(y)  
    print(z)
    #运行结果:True
    
    #复制  copy()
    fruits = {"apple", "banana", "cherry"}
    x = fruits.copy()
    print(x)
    #运行结果:{"apple", "banana", "cherry"}
    
    #长度计算  len(set)
    fruits = {"apple", "banana", "cherry"}
    len(fruits)
    #运行结果:3
    
    #判断元素是否存在   x in set
    fruits = {"apple", "banana", "cherry"}
    s = "apple" in fruits
    print(s)
    #运行结果:True
    

     

5、固定集合(frozenset)

  • 固定集合和集合的区别就是固定集合是不可变的,而集合是可变的,其他的基本都一样
  • 相当于集合的全部方法去掉能够修改集合的方法
f = frozenset([1,2,3,4])

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值