【集合】
集合的特点:
1、由不同元素组成
2、无序
3、集合中元素必须是不可变类型(字符串、数字、元组)
如何定义一个集合:
s = {1,2,3}
type(s) #set
另一种定义方式:
s = set('hello') #内部放置可迭代类型(set是一个for循环)
print(s) #{'h', 'l', 'e', 'o'}
集合的内置方法:
【s.add()】
s = {1,2,3,4,5,6}
s.add('s')
print(s) #{1, 2, 3, 4, 5, 6, 's'}
s.add(3) #{1, 2, 3, 4, 5, 6, 's'}
【clear()】
s = {1,2,3,4,5,6}
s.clear()
print(s) #set()
【copy()】
s = {1,2,3,4,5,6}
s1 = s.copy()
【pop()】
s = {1,2,3,4,5,6}
s1 = s.pop() #随机删除
【remove()】
s = {1,2,3,4,5,6}
s.remove(2) #和append一样,直接在原来的set上修改,不用赋值给其他的变量
print(s)
#删除元素不存在的时候会报错
【discard()】
s = {1,2,3,4,5,6}
s1 = s.discard(7) #删除元素不存在时候不会报错
【set() 可以用来去重】
name = ['alex','alex','yxy']
s = set(name)
name = list(s)
print(name) #['yxy', 'alex'] 但是元素的顺序会发生变化
集合的关系运算:
【intersection() 交集】
python = ['a','b','c']
linux = ['a','b']
p = set(python)
l = set(linux)
print(p,l) #{'b', 'c', 'a'} {'b', 'a'}
print(p.intersection(l)) #{'b', 'a'}
print(p&l) #{'b', 'a'}
【union() 并集】
python = ['a','b','c']
linux = ['a','b']
p = set(python)
l = set(linux)
print(p.union(l)) #{'a', 'b', 'c'} 注意:union函数不会覆盖原集合p
print(p|l) #{'a', 'b', 'c'}
【difference() 差集】
python = ['a','b','c']
linux = ['a','b']
p = set(python)
l = set(linux)
print(p.difference(l)) #{'c'}
print(p-l) #{'c'}
【symmetric_difference() 交叉补集:先合在一块(无重复),再减去共同的部分】
python = ['a','b','c']
linux = ['a','b']
p = set(python)
l = set(linux)
print(p.symmetric_difference(l)) #{'c'}
print(p^l)
【difference_update()】
用于移除两个集合中都存在的元素
difference_update()
方法与 difference()
方法的区别在于 difference()
方法返回一个移除相同元素的新集合,而 difference_update()
方法是直接在原来的集合中移除元素,没有返回值。
python = ['a','b','c']
linux = ['a','b']
p = set(python)
l = set(linux)
print(p,l)
print(p.difference_update(l)) #输出的是None,因为没有返回值
【isjoint() 判断两个集合是否有交集:如果没有交集输出True,如果有交集输出False】
s1 = {1,2}
s2 = {3,5}
print(s1.isdisjoint(s2)) #True
#这个规则好反人类啊。。
【issubset() 判断两个集合是否为父子级的关系】
s1 = {1,2}
s2 = {1,2,3}
print(s1.issubset(s2)) #True
【update()】
s1 = {1,2}
s2 = {1,2,3}
s1.update(s2)
print(s1) #{1, 2, 3} 可以更新多个值
#注意:
s1.add(1) #只能更新一个值
s1.union(s2) #并集,不更新
用update传元组和列表:
s1 = {1,2,3}
s1.update((3,4))
print(s1) #{1, 2, 3, 4}
-----------------------------------
s1 = {1,2,3}
s1.update([3,4])
print(s1) #{1, 2, 3, 4}
上述的集合是可变类型
但是,下面这个集合是不可变的:
【frozenset() 没有add、pop等方法】
s = frozenset('hello')
print(s) #frozenset({'o', 'e', 'h', 'l'})