7、集合(Set)
集合(set)是一个无序的不重复元素序列。
7.1、创建集合
a、定义一个集合,将元素用 {}
扩起来。
# example:
set01 = {'Kevin', 'Jose', 'Delia'}
print('set01 = {}'.format(set01))
# 运行结果:
set01 = {'Jose', 'Kevin', 'Delia'}
b、使用set()
命令来创建集合
# example:
set01 = set("student")
print('set01 = {}'.format(set01))
# 运行结果:
set01 = {'d', 'e', 'n', 's', 'u', 't'}
从上面的定义中可以看出,定义好的集合输出后元素都进行了重新排列,这也正是体现了集合无序的特征。
7.2、集合元素的去重
从定义上可以看出,集合(set)是一种无序不重复的序列,那么我们在定义一个集合的过程中,如果该集合中重复出现了某个或者某些元素,该集合在输出的时候,将只保留一个该元素,而会将多余重复的元素删除。
# example:
set01 = {'Kevin', 'Jose', 'Delia','Kevin','Loki','Delia'}
print('set01 = {}'.format(set01))
# 运行结果:
set01 = {'Kevin', 'Loki', 'Jose', 'Delia'}
7.3、集合的运算
# example:
set01 = {'Kevin','Jose','Delia','Worker'}
set02 = {'Student','Worker','Teacher','Kevin'}
print('set01 - set02 = {}'.format(set01 - set02))
print('set01 & set02 = {}'.format(set01 & set02))
print('set01 | set02 = {}'.format(set01 | set02))
print('set01 ^ set02 = {}'.format(set01 ^ set02))
# 运行结果:
set01 - set02 = {'Jose', 'Delia'}
set01 & set02 = {'Kevin', 'Worker'}
set01 | set02 = {'Student', 'Delia', 'Jose', 'Worker', 'Teacher', 'Kevin'}
set01 ^ set02 = {'Student', 'Delia', 'Jose', 'Teacher'}
a、set01 - set02:集合set01
中包含而集合set02
中不包含,换句话说就是集合set01
减去与set02
中重复的元素,剩余的元素,需要注意的是,如果集合set02
中有set01
中没有的元素,这个相减的结果是不包括这些元素的。
b、set01 & se02:集合set01
和集合set02
中共同包含的元素,相当于两个集合的交集。
c、set01 | set02:集合set01
和集合set02
中包含的所有元素,相当于两个集合的并集。
d、set01 ^ set02: 集合set01
和集合set02
中不同时包含的元素,可以理解为并集减去交集剩余的部分。
7.4、集合中添加元素
向集合中添加元素有两种方法,一种是set.add(object)
,一种是set.update()
。
区别是,前者是将单个元素添加到集合中,如果集合中本身存在这个元素,则根据不重复原则,将不改变已有内容;后者向集合中添加元素不限于单个元素,也可以是列表、元组、字典等。
a、add()
def add(self, *args, **kwargs): # real signature unknown
"""
Add an element to a set.
This has no effect if the element is already present.
"""
pass
def add(self, *args, **kwargs): # real signature unknown
"""
向集合中添加一个元素。
如果元素已经存在,则此操作无效。
"""
pass
b、update()
def update(self, *args, **kwargs): # real signature unknown
""" Update a set with the union of itself and others. """
pass
def update(self, *args, **kwargs): # real signature unknown
""" 使用自身和其他的并集更新集合。 """
pass
# example:
set01 = {'Kevin','Jose','Delia'}
set01.add('Loki')
print('set01 = {}'.format(set01))
set01.add('Jose')
print('set01 = {}'.format(set01))
list01 = [2,3,4]
dict01 = {
'name': 'Sarah',
'age': 28,
'sex': '女',
}
set01.update(list01,dict01)
print('set01 = {}'.format(set01))
# 运行结果:
set01 = {'Jose', 'Kevin', 'Delia', 'Loki'}
set01 = {'Jose', 'Kevin', 'Delia', 'Loki'}
set01 = {2, 3, 4, 'Kevin', 'Delia', 'Loki', 'age', 'Jose', 'name', 'sex'}
需要注意的一点是,通过测试发现,利用update方法往集合中增加元素的时候,整数或者整型是不被允许的,会报错。此外,字典虽然可以被添加,但是只是把键添加进去了,而值则被忽略掉了。
7.5、集合中删除元素
从集合中删除元素共有三种方法:set.remove(object)
、set.dicard(object)
、set.pop()
。
前两种都是对集合中指定元素的删除,如果元素存在于集合中,效果是一样的。如果要删除的元素不存在于集合中,remove
方法就会报错,而discard
方法则不会报错,pop
方法则是随机删除集合中的一个元素。
a、remove()
def remove(self, *args, **kwargs): # real signature unknown
"""
Remove an element from a set; it must be a member.
If the element is not a member, raise a KeyError.
"""
pass
def remove(self, *args, **kwargs): # real signature unknown
"""
从集合中移除一个元素;它必须是一个成员。
如果元素不是成员,则引发密钥错误。
"""
pass
b、dicard()
def discard(self, *args, **kwargs): # real signature unknown
"""
Remove an element from a set if it is a member.
If the element is not a member, do nothing.
"""
pass
def discard(self, *args, **kwargs): # real signature unknown
"""
如果元素是成员,则从集合中删除它。
如果元素不是成员,则什么也不做。
"""
pass
c、pop()
def pop(self, *args, **kwargs): # real signature unknown
"""
Remove and return an arbitrary set element.
Raises KeyError if the set is empty.
"""
pass
def pop(self, *args, **kwargs): # real signature unknown
"""
删除并返回任意的集合元素。
如果集合为空,则引发KeyError。
"""
pass
# example:
set01 = {'Kevin','Jose','Delia'}
set02 = {'Student','Worker','Teacher'}
set03 = {85,12,28}
set01.remove('Kevin')
set02.discard('Student')
set03.pop()
print('set01 = {}'.format(set01))
print('set02 = {}'.format(set02))
print('set03 = {}'.format(set03))
# 运行结果:
set01 = {'Jose', 'Delia'}
set02 = {'Teacher', 'Worker'}
set03 = {12, 85}
7.6、其他相关
len(set):计算集合的元素个数
set.clear():清空集合
object in set:判断元素object是否在集合set中,如果是,返回True,如果不是,返回False。
a、len()
def len(*args, **kwargs): # real signature unknown
""" Return the number of items in a container. """
pass
def len(*args, **kwargs): # real signature unknown
""" 返回集合中元素的个数。 """
pass
b、clear()
def clear(self, *args, **kwargs): # real signature unknown
""" Remove all elements from this set. """
pass
def clear(self, *args, **kwargs): # real signature unknown
""" 从这个集合中删除所有元素。 """
pass
# example:
set01 = {'Kevin','Jose','Delia'}
print('len(set01) = {}'.format(len(set01)))
if 'Kevin' in set01:
print(True)
else:
print(False)
set01.clear()
print('set01 = {}'.format(set01))
# 运行结果:
len(set01) = 3
True
set01 = set()
网友评论