07_Python 集合


集合是包含一组 唯一值的容器。和列表不一样,集合中的元素不以任何特定的顺序存储,不能通过位置进行访问。集合对象可用的操作和数学中集合的操作是一样的。

创建集合

创建集合有{}和set()两种方法,其中创建空集合不能用{},只能用set(),因为{}已被用于创建空字典。集合中的元素只能为数字、字符串、布尔值、元组,不能为列表、集合和字典
{}方法

  • {value1,value2,…,valuen}:创建集合,value1、value2、…是互不相同的。
set1 = {1,2,3,"a","b"}
print(set1)  # {1, 2, 3, 'a', 'b'}

set2 = {1,2,3.0,"Abc","B",True,False,(1,2,3)}
print(set2)  # {False, 1, 2, 3.0, (1, 2, 3), 'Abc', 'B'}

#set3 = {1,2,3,[1,2]}  # TypeError: unhashable type: 'list'
#set4 = {1,2,3,{"a","b"}}  # TypeError: unhashable type: 'set'
#set5 = {1,2,3,{"A":1,"B":2}}  # TypeError: unhashable type: 'dict'

set()方法

  • set():创建空集合。
  • set(iterable):从可迭代对象创建集合。可通过set()方法去除可迭代对象中的重复元素
import numpy as np

set0 = set()
print(set0) # set()

data1 = [1,2,3,4,5,3,4,5]
set1 = set(data1)  # 去除data1中的重复元素
print(set1)  # {1, 2, 3, 4, 5}

data2 = np.arange(6)
set2 = set(data2)
print(set2)  # {0, 1, 2, 3, 4, 5}

map_object = map(str,[1,2,3,4,5])
set3 = set(map_object)
print(set3)  # {'4', '5', '1', '2', '3'}


集合中的常用方法

在这里插入图片描述

集合运算

方法说明
len(s)求集合的元素个数。
s1.intersection(*s)求s1与多个集合的交集。
s1.union(*s)求s1与多个集合的并集。
s1.difference(*s)求s1与多个集合的差集。
s1.symmetric_difference(*s)求s1与多个集合的对称差异,即:求两集合的非交集构成的并集。
# 求集合的元素个数
s0 = {1,2,3.0,"Abc","B",True,False,(1,2,3)}
print(len(s0))  # 7

# 求两个集合的交集
s1 = {1,2,3,4,5}
s2 = {3,4,5,6,7}
new_set = s1.intersection(s2)
print(new_set)  # {3, 4, 5}

# 求多个集合的并集
s4 = {1,2,3}
s5 = {2,3,4,5}
s6 = {4,5,6,7}
new_set = s4.union(s5,s6)
print(new_set)  # {1, 2, 3, 4, 5, 6, 7}

# 求两个或多个集合的差集
s7 = {1,2,3,4,5,6,7}
s8 = {5,6,7,8,9} 
new_set = s7.difference(s8)
print(new_set)  # {1, 2, 3, 4}

# 求两个集合的对称差异,即:求两集合的非交集构成的并集
s9 = {1,2,3,4,5}
s10 = {3,4,5,6,7,8}
new_set = s9.symmetric_difference(s10)
print(new_set)  # {1, 2, 6, 7, 8}


判断

方法说明
s1.issubset(s2)判断s1是否是s2的子集,是则返回True;否则,返回False。
s1.isdisjoint(s2)判断s1和s2是否没有交集,没有则返回True;否则,返回False。
# 判断一个集合是否是另外一个集合的子集
s1 = {1,2,3}
s2 = {1,2,3,4,5,6}
flag1 = s1.issubset(s2)
print(flag1)  # True

# 判断两个集合是否没有交集,是则返回True;否则,返回False。
s3 = {1,2,3}
s4 = {4,5,6}
flag2 = s3.isdisjoint(s4)
print(flag2)  # True


更新

方法说明
s1.add(element)向集合中添加一个元素。如果原集合已存在该元素,则原集合不改变。
s1.intersection_update(*s)用s1与多个集合的交集来更新s1。
s1.update(*s)用s1与多个集合的并集来更新s1。
s1.difference_update(*s)用s1与多个集合的差集来更新s1。
s1.symmetric_difference_update(*s)用s1与多个集合的比较差异集合来更新s1。
s1 = {1,2,3}
s1.add(4)
print(s1)  # {1, 2, 3, 4}

s2 = {1,2,3,4,5,6}
s3 = {4,5,6,7,8}
s2.intersection_update(s3)
print(s2)  # {4, 5, 6}

s4 = {1,2,3}
s5 = {3,4,5,6}
s4.update(s5)
print(s4)  # {1, 2, 3, 4, 5, 6}

s6 = {1,2,3,4,5,6,7}
s7 = {2,3,4}
s6.difference_update(s7)
print(s6)  # {1, 5, 6, 7}

s8 = {1,2,3,4,5,6}
s9 = {3,4,5,6,7,8,9}
s8.symmetric_difference_update(s9)
print(s8)  # {1, 2, 7, 8, 9}


删除

方法说明
delPython内置函数,删除对象。
s.clear()清空集合,原集合变为空集合。
s.pop()删除集合任意一个元素,并将该元素返回。
s.discard(element)删除集合的一个元素,如果该元素不在集合中,无影响。
s.remove(element)删除集合的一个元素,如果该元素不在集合中,则报错。
# 直接删除集合对象
s0 = {1,2,3}
del s0
#print(s0)  # NameError: name 's0' is not defined

# 清空集合
s1 = {1,2,3,4}
s1.clear()  
print(s1)           # set()

# 移除集合的一个元素,如果该元素不在集合中,不报错
s2 = {1,2,3,4,5}
s2.discard(5)
print(s2)           # {1, 2, 3, 4}
s2.discard(10)
print(s2)           # {1, 2, 3, 4}

# 删除任意一个集合元素,并将该元素返回。如果集合为空,则报错
s3 = {1,2,3,4,5}
result = s3.pop()
print(s3,result)   # {2, 3, 4, 5} 1

# 删除一个集合元素,如果该元素不在集合中,则报错
s4 = {1,2,3,4,5}
s4.remove(3)
print(s4)          # {1, 2, 4, 5}
try:
    s4.remove(10)
except:
    print("要删除的元素不在集合中")
                   # 要删除的元素不在集合中


拷贝

方法说明
=无拷贝,只是给对象的引用起别名。
s.copy()深拷贝,产生新内存和新对象。
s1 = {1,2,3,4}
s2 = s1
print(s2)       # {1, 2, 3, 4}
print(id(s1))   # 2404798480448
print(id(s2))   # 2404798480448
s2.add(10)		# s2改变时,s1也随着改变
print(s1)       # {1, 2, 3, 4, 10}


s1 = {1,2,3,4}
s3 = s1.copy()
print(s3)       # {1, 2, 3, 4}
print(id(s1))   # 2404798480448
print(id(s3))   # 2404798483584
s3.add(10)		# s2改变时,s1不改变
print(s1)    # {1, 2, 3, 4}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值