集合
- 1、不同元素组成的集合
- 2、集合是一组无需排序的可hash值
s={(1,2,3),1}
print(s) #无序的 输出 {1, (1, 2, 3)}
知识兔- 3、集合中的元素必须是不可变类型
#集合
s={'a','a','a',1,2,3,'b',(1,2,'a')}
print(s) #去重‘a’
a_in='a' in s #快速判断元素是否在集合内
print(a_in)
aa_in='aa' in s #快速判断元素是否在集合内
print(aa_in)
#s={'a',1,2,3,'b',(1,2,'a'),{'a':'aaa'}} # 集合里面不允许有字典 TypeError: unhashable type: 'dict'
#s={'a',1,2,3,'b',(1,2,'a'),[1,2,3,'a']} #集合里面不允许有 列表 TypeError: unhashable type: 'list'
知识兔集合的创建
#定义可变集合set
set_test=set('hello world')
print(set_test) #{'w', 'e', 'o', 'h', 'l', 'r', 'd', ' '}
set_test1=set(['aa','abex',1,2,(1,2),(1,2)])
print(set_test1) #输出 {'abex', 1, 2, (1, 2), 'aa'}
#定义不可变集合frozenset
f_set_test=frozenset(set_test)
print(f_set_test) #输出 frozenset({'w', 'e', 'o', 'h', 'l', 'r', 'd', ' '})
知识兔集合的基本操作
1、添加元素
s={'a','b','c','d','e'}
s.add('1')
print(s) #{'a', 'b', 'c', 'e', '1', 'd'}
s.add('1') #重复添加
print(s) #{'a', 'b', 'c', 'e', '1', 'd'}
s.add(1)
print(s) #{1, 'a', '1', 'c', 'd', 'e', 'b'}
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
s1 = {1,2}
s2 = {1,2,3}
s1.update(s2)
print(s1)
s1 = {1,2}
s2 = {4,5,6}
s1.update(s2) #更新多个值
print(s1)
s1.update(['a','b','c'])
print(s1)
s1.add(7) #只能更新一个值
print(s1)
#s1.add(8,9) #更新多个值,报错TypeError: add() takes exactly one argument (2 given)
"""
虚线下print执行结果
{1, 2, 3}
{1, 2, 4, 5, 6}
{1, 2, 4, 5, 6, 'a', 'b', 'c'}
{1, 2, 4, 5, 6, 'c', 7, 'b', 'a'}
"""
知识兔2、清空、拷贝、删除元素
s.clear() #清空集合
print(s) #输出set()
s={1, 'a', '1', 'c', 'd', 'e', 'b'}
s1=s.copy() #拷贝集合
print(s1) #{1, 'c', 'a', 'd', 'b', '1', 'e'}
s1.pop() #随机删除一个元素
print(s1) #输出 {'e', 'a', 'c', 'b', '1', 'd'}
s={1, 'a', '1', 'c', 'd', 'e', 'b'}
s.remove('a') #指定删除存在元素 ‘a’
print(s)
s.remove('aa') #指定删除不存在元素 ‘aa’
print(s) #则会报错 KeyError: 'aa'
s.discard('aa') #指定删除不存在元素 ‘aa’,不会报错
print(s) #直接输出集合,不会报错
s.discard('b') #指定删除不存在元素 ‘b,不会报错
print(s) #输出 {1, '1', 'd', 'c', 'e'}
知识兔3、集合关系运算交、差、并集
a=set('abcdefy')
b=set('abcdeio')
print(a,b)
#求差集
s1=a-b #集合中a中包含而基本b中不包含的元素
print("a-b",s1)
print("差集",a.difference(b))
s2=b-a #集合中a中包含而基本b中不包含的元素
print("b-a",s2)
print("差集",b.difference(a))
#求并集
s3 = a|b #集合a或者b 包含的所有元素
print("a|b",s3)
print("并集",a.union(b))
#求交集
s4 = a & b #集合a 和集合 b 都包含的元素
print("a&b",s4)
print("交集",a.intersection(b))
#交叉补集
s5 = a^b #不包含a和b的元素
print("a^b ",s5)
print("交叉补集",a.symmetric_difference(b))
"""
执行结果如下
{'d', 'e', 'a', 'b', 'y', 'c', 'f'} {'d', 'e', 'a', 'b', 'c', 'o', 'i'}
a-b {'y', 'f'}
差集 {'y', 'f'}
b-a {'o', 'i'}
差集 {'o', 'i'}
a|b {'d', 'e', 'a', 'b', 'y', 'c', 'f', 'o', 'i'}
并集 {'d', 'e', 'a', 'b', 'y', 'c', 'f', 'o', 'i'}
a&b {'d', 'e', 'a', 'b', 'c'}
交集 {'d', 'e', 'a', 'b', 'c'}
a^b {'y', 'f', 'o', 'i'}
交叉补集 {'y', 'f', 'o', 'i'}
"""
知识兔a=set('abcdefy')
b=set('abcdeio')
z = a.isdisjoint(b) #如果有包含则返回 False
print(z)
x = {"apple", "banana", "cherry"}
y = {"google", "runoob", "facebook"}
z = x.isdisjoint(y) # 如果没有包含则返回 True
print(z)
s1 = {1,2}
s2 = {1,2,3}
print(s1.issubset(s2)) #s1 是s2的子集 则True
print(s2.issubset(s1)) #s2 不是s2的子集 则False
print(s2.issuperset(s1)) #s2 是s1的父集 则True
print(s1.issuperset(s2)) #s1 是s2的父集 则False
"""
执行结果
False
True
True
False
True
False
"""
知识兔4、difference_update()
方法用于移除两个集合中都存在的元素difference_update()
方法与 difference()
方法的区别在于 difference()
方法返回一个移除相同元素的新集合,而 difference_update()
方法是直接在原来的集合中移除元素,没有返回值。
a=set('abcdefy')
b=set('abcdeio')
print(a,b)
a.difference_update(b)
print(a)
a=set('abcdefy')
b=set('abcdeio')
b.difference_update(a)
print(b)
"""
执行结果
{'d', 'a', 'c', 'b', 'y', 'f', 'e'} {'i', 'o', 'd', 'a', 'c', 'b', 'e'}
{'y', 'f'}
{'i', 'o'}
"""
知识兔 5、集合转换成列表、字符串
s={1,2,3,5,6}
lists=list(s) #集合转换成列表
print(lists)
s={1,'a','b'}
strs=str(s) #集合转换成字符串
print(strs)
s={'c','a','b'}
strs=''.join(s) #集合全部包含字符串,则用join
print(strs)
知识兔