集合
python的内置数据结构之一,与列表、字典一样都属于可变序列 集合是没有value的字典,相当于计算key的hash值并存储key,其他则和字典一样,比如key不能重复,key必须是不可变对象,key是无序的。 也就是说集合中的元素是不可重复的、是不可变对象、是无序的。
集合的创建方式
s = { 'python' , 'hello' , 90 , 90 , 80 }
使用内置函数set( )可以将列表、元组、字符串序列、集合序列、rang()创建的整数序列转成集合。转成集合后序列的顺序可能发生改变,同时会去掉重复元素。
s1 = set ( range ( 6 ) )
print ( s1)
s2 = set ( [ 1 , 2 , 4 , 5 , 5 , 5 , 6 , 6 ] )
print ( s2)
s3 = set ( ( 1 , 2 , 4 , 4 , 5 , 65 ) )
print ( s3)
s4 = set ( 'python' )
print ( s4)
s5 = set ( { 12 , 4 , 34 , 55 , 66 , 44 , 4 } )
print ( s5)
定义一个空集合就不能直接用s = { }来创建了,这样创建出来的实际上是一个字典,应该有s = set()
s = { }
s = set ( )
集合元素的判断操作
用in和not in来判断某一元素是否在集合中
集合元素的添加操作
方法 作用 add() 添加一个元素 update() 添加至少一个元素
s = { 10 , 20 , 30 , 405 , 60 }
s. add( 80 )
print ( s)
s. update( { 200 , 400 , 300 } )
print ( s)
集合元素的删除操作
方法 作用 remove() 删除一个指定元素,如果指定元素不存在则抛出KeyError dicard() 删除一个指定元素,如果指定元素不存在不抛异常 pop() 没有参数且只能删除一个任意元素 clear() 清空集合
集合间的关系
关系 判断方法 两个集合是否相等 可以用==或!=进行判断 s2是否为s1的子集 s2.insubset(s1) s1是否为s2的超集 s1.issuperset(s2) s1和s2是否有交集 s1.isdisjoint(s2),注意函数内是disjoint,所以没有交集返回True,有交集返回False
集合的数学操作
s1 = { 10 , 20 , 30 , 40 }
s2 = { 20 , 30 , 40 , 50 , 60 }
print ( s1. intersection( s2) )
print ( s1 & s2)
print ( s1. union( s2) )
print ( s1 | s2)
print ( s1. difference( s2) )
print ( s1 - s2)
print ( s1. symmetric_difference( s2) )
print ( s1 ^ s2)
集合生成式
集合生成式就是用于生成集合的公式,公式的一般形式为: {表示集合元素的表达式 for 自定义变量 in 可迭代对象}
s = { i* i for i in range ( 10 ) }
print ( s)
实际上,将公式两端的花括号{}改成[]就是列表生成式。 元组是没有生成式的。
列表、字典、元组、集合总结
数据结构 是否可变 是否重复 是否有序 定义符号 列表list 可变 可重复 有序 [ ] 元组tuple 不可变 可重复 有序 ( ) 字典dict 可变 key不可重复,value可重复 无序 {key: value} 集合set 可变 不可重复 无序 { }