Python集合
前言
Python中的集合与我们数学意义上的集合差不多:无序,互异.
并且能进行相应的集合运算.
新建一个集合
方法一:
s = {1, 2, 3, 4}
注意:
- 用这个方法创建的集合,如果在初始的时候输入了相同的元素,会自动根据元素的互异性进行排重.
如下:
# 演示集合的互异性
s2 = {1,2,3,4,5,4,3,2,1}
print(s2)
输出结果如下:
{1, 2, 3, 4, 5}
- 用这种方法不能创建空的集合.因为这种方法创建的是空的字典,不是空的集合
s3 = {} # 这样创建的是空的字典
方法二:
s3 = set(1,2,3,4,5)
s4 = set()
用这种方法可以创建空的集合
方法三:
与列表推导式一样的方法
s5 = {x for x in range(5)}
print(s5) # 输出"{0,1,2,3,4}
增加元素
方法一:add()
s5.add(5) # 这种方法添加的元素,如果集合内已经存在了,则不会起作用.如果不存在,才会加入集合
方法二:update()
# 参数可骒列表
s5.update([6, 7, 8, 9, 10])
print(s5) # 输出: {0, 1, 2, 3, 4, 6, 7, 8, 9, 10}
# 参数可以是元组
s5.update((11,12))
print(s5) # 输出: {0, 1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 12}
# 参数可以是集合
s5.update({13,14})
print(s5) # {0, 1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14}
# 参数可以是字典
s5.update({"name":"Tom", "age": 13})
print(s5) # {0, 1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 'age', 'name'}
# 参数可以有多个,且类型可以不一样
s5.update([15,16], {17, 18})
print(s5) # 输出{0, 1, 2, 3, 4, 'name', 6, 7, 8, 9, 10, 11, 12, 13, 14, 'age', 15, 16, 17, 18}
注意:
1.update()参数可以是列表,元组,字典,集合.
当参数是字典的时候,会将Key加入集合,value会自动忽略,要想加入value,可以用.values()方法获取value的列表
2. 参数可以不唯一
删除元素
方法一: remove()
s5.remove(0)
print(s5) # 输出{1, 2, 3, 4, 'name', 6, 7, 8, 9, 10, 11, 12, 13, 14, 'age', 15, 16, 17, 18}
注意:此方法如果元素不存在,会报错:
KeyError
方法二:discard()
# 删除不存在的元素也不会报错
s5.discard(0)
print(s5) # 输出{1, 2, 3, 4, 'name', 6, 7, 8, 9, 10, 11, 12, 13, 14, 'age', 15, 16, 17, 18}
# 删除指定的元素
s5.discard(1)
print(s5) # 输出{2, 3, 4, 'name', 6, 7, 8, 9, 10, 11, 12, 13, 14, 'age', 15, 16, 17, 18}
方法三:pop()
删除第一个元素,并让集合重新乱序
x = s5.pop()
print(s5)
第一次运行的结果
{3, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 'name', 'age'}
第二次运行的结果
{3, 4, 'name', 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 'age'}
{3, 4, 'age', 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 'name'}
清空集合:clear()
s4.clear()
查
3 in s5 # 返回True
2 in s5 # 返回False
集合运算
并集
# 集合运算
s6 = {1,2,3,4}
s7 = {3,4,5,6}
s8 = s6.union(s7) # 并集
print(s8) # 输出{1, 2, 3, 4, 5, 6}
s9 = s6.intersection(s7) # 交集
print(s9) # 输出{3, 4}
s10 = s6.difference(s7) # 差集: 所有属于前集合但不属于参数集合的元素组成的集合
print(s10) # 输出{1, 2}
集合中的其他运算:
- 判断参数是不是调用者的子集:issubset()
s11 = {1,2}
s12 = {1,2,3,4,5}
x = s6.issubset(s11)
y = s6.issubset(s12)
print(x,y) # 输出False True
- 判断调用者是不是参数的子集:issuperset()
z = s6.issuperset(s11) # z = true
- 一些其他的方法
isdisjoint() # 判断两个集合是否有公共元素(有返回True,否则返回False)
symmetric_difference() # 返回两个集合的互异元素组成的集合
symmetric_difference_update() # 返回两个集合中的互异元素组成的集合:等价于并集 - 交集
后记:
Python中的基本数据类型终于更新的差不多了.
下一节开始,重新回到应用方面的更新了.
敬请期待