2.Python数据容器之集合(set)

该博客围绕Python中集合展开,介绍了集合是无序不重复元素序列,可用大括号或set()函数创建,空集合需用set()。还阐述了集合的常见用法,包括定义、添加和删除元素、判断元素是否相同,以及交集、子集等关系和集合运算。

集合及相关操作

集合是Python中一个无序的不重复元素序列
可以使用大括号{ }或者set()函数创建集合,注意:创建一个空集合必须用set()而不是{ },因为{ }是用来创建一个空字典
下面将介绍Python中集合的一些常见用法:

1.集合的定义

(1) basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
(2) fruit = set(("apple", "banana", "cherry"))

'''
当使用print()函数打印输出时,会自动将集合中重复的元素去除,且每次打印返回的顺序并不和初始的一致。
在使用set()函数创建集合时,一定要注意双括号。
'''

2.向集合中添加元素

(1)
'''
用add(element)方法给集合添加元素,如果添加的元素在集合中已存在,则add()方法就不会添加元素
如向fruits集合添加一个元素: 
'''
fruits = {"apple", "banana", "cherry"}
fruits.add("orange")
print(fruits)

(2)
'''
用update(set)方法修改当前集合,可以添加新的元素或集合到当前集合中,如果添加的元素在集合中已存在,则该元素只会出现一次,重复的会忽略
如合并x和y两个集合,重复元素只会出现一次:
'''
x = {"apple", "banana", "cherry"}
y = {"google", "runoob", "apple"} 
x.update(y) 
print(x) # 输出结果:{'banana', 'apple', 'google', 'runoob', 'cherry'}

3.删除集合元素

(1)
'''
用remove(item)方法移除集合中的指定元素
如移除元素banana:
'''
fruits = {"apple", "banana", "cherry"}
fruits.remove("banana") 
print(fruits) # 输出结果:{'cherry', 'apple'}

(2)
'''
用discard(value)方法移除指定的集合元素,用remove()方法在移除一个不存在的元素时会发生错误,
而discard()方法不会,用法与remove()相同
'''
fruits.discard("banana") 

(3)
''' 
用pop()方法随机移除一个元素,虽然此方法将删除最后一项,
但是请记住,集合set是无序的,因此我们不知道被删除的是什么元素
'''
set.pop()

(4) 用clear()方法移除集合中的所有元素
set.clear()
'''
注意:clear()函数的功能是移除集合中所有元素,而del()的功能是删除集合。
所以,当对一个集合使用clear()方法或del函数,并分别对其使用print()函数打印输出时,前者会返回一个空的集合,而后者会报错:NameError: name 'fruit' is not defined.
clear()会从内存删除集合与清空集合,但内存地址不删除,del()则会从内存中删除。
'''

4.判断集合是否包含相同元素

'''
使用isdisjoint(set)方法判断两个集合是否包含相同的元素,不包含相同的元素返回True,而包含相同的元素则返回False
如判断集合y中是否有包含集合x的元素:
'''
x = {'a', 'b', 'c'}
y = {'x', 'y', 'z'}
print(x.isdisjoint(y)) # 输出结果:True

5.交集(1),(2),子集(3),超集(4),差集(5),(6)

(1)
返回交集,用intersection(set1, set2 ... etc)方法返回两个或更多集合中都包含的元素
返回一个新集合,该集合的元素既包含在集合x又包含在集合y中:
x = {'a', 'b', 'c'}
y = {'x', 'y', 'z', 'c'}
print(x.intersection(y)) # 输出结果:{'c'}
计算多个集合的交集:
x = {'a', 'b', 'c'}
y = {'x', 'y', 'z', 'c'}
z = {'c', 'a', 'd'}
st = x.intersection(y, z)
print(st) # 输出结果:{'c'},返回的集合仅包含在所有集合中都存在的元素

(2)
计算交集并从原集合中移除所有非交集中的元素
注意intersection_update()方法不同于intersection()方法,因为intersection()方法是返回一个新的集合,
而intersection_update()方法是在原始的集合上移除不重叠的元素。
如移除x集合中不存在于y集合中的元素:
x = {'a', 'b', 'c'}  # y集合不包含a,被移除
y = {'x', 'y', 'b', 'c'}
x.intersection_update(y)
print(x) # 输出结果:{'b', 'c'}

(3)
判断子集,用issubset(set)方法判断集合的所有元素是否都包含在指定集合中,如果是则返回True,否则返回False
如判断集合x是否是集合y的子集
此种情下况返回True:
x = {'a', 'b', 'c'}
y = {'x', 'y', 'z', 'a', 'b', 'c'}
print(x.issubset(y)) # 输出结果:True
此种情况下返回False:
x = {'a', 'b', 'c'}
y = {'x', 'y', 'z', 'a'}
print(x.issubset(y)) # 输出结果:False

(4)
判断超集,用issuperset()方法判断指定集合的所有元素是否都包含在原始的集合中,如果是则返回True,否则返回False
如判断集合x是否为集合y的超集
此种情下况返回True:
x = {'a', 'b', 'c', 'x', 'y', 'z'}
y = {'a', 'b', 'c'}
print(x.issuperset(y)) # 输出结果:True
此种情况下返回False:
x = {'a', 'x', 'y', 'z'}
y = {'a', 'b', 'c'}
print(x.issuperset(y)) # 输出结果:False

(5)
返回差集,用isdifference()方法返回一个集合,此集合为另外两个集合的差集
如计算集合x与集合y的差集并返回
x = {'a', 'b', 'c', 'x', 'y', 'z'}
y = {'a', 'b', 'c'}
st = x.difference(y)
print(st) # 输出结果:{'x', 'y', 'z'}

(6)
计算差集并从原集合中移除所有非差集中的元素,无返回值
如移除集合x中不属于x与y的差集的元素
x = {'a', 'b', 'c', 'x', 'y', 'z'}
y = {'a', 'b', 'c'}
print(x.difference(y)) # 输出结果:{'x', 'y', 'z'}

6.集合的运算

【两个集合之间的计算有4种,分别是|、&、-和^

先创建两个集合,方便下面对其进行运算
a = set('abcdefg')
b = set('abg')

(1)
a|b表示求并集:集合a或集合b中包含的所有元素
print(a | b)  # {'d', 'b', 'e', 'c', 'g', 'f', 'a'}

(2)
a&b表示求交集:集合a和集合b都包含的元素
print(a & b)  # {'a', 'b', 'g'}

(3)
a-b表示求差集:集合a中包含而集合b中不包含的元素
print(a - b)  # {'e', 'd', 'f', 'c'}

(4)
a^b表示求对称差集:属于集合a和b,但不属于它们的交集的元素
print(a ^ b)  # {'e', 'c', 'd', 'f'}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值