集合
集合是无序、可变序列,使用一对大括号界定,元素不可重复,同一个集合中每个元素都是唯一的。
集合中只能包含数字、字符串、元组等不可变类型(或者说可哈希)的数据,而不能包含列表、字典、集合等可变类型的数据。
集合创建与删除
a={3,5} #创建集合对象
x={3,5,[2]} #集合中每个元素都必须是不可变的
Traceback (most recent call last):
File "<pyshell#44>",line 1,in <module>
x={3,5,[2]}
TypeError:unhashable type:'list'
set([0, 1, 2, 3, 0, 1,2,3,7,8]) #转换时自动去掉重复元素
{0,1,2,3,7,83}
set('Hello world') #把字符串转换为集合,自动去除重复
{'','d','r','o',‘w','l','H','e'}
x= set() #空集合
set([(1,2),(3,)]) #只包含简单值的元组可以作为集合的元素
{(1,2),(3,)}
set([(1,2),(3,),{4}]) #集合不能作为集合的元素
Traceback (most recent call last):
File "<pyshell#46>",line 1, in <module>
set([(1,2),(3,),{4}])
TypeError:unhashable type:'set’
集合元素增加与删除
(
1) add()方法
s= 20,30,50
s #自动调整顺序,不需要关心这一点
{50,20,30}
s.add(40)
s
{40,50,20,30}
s.add(25) #自动调整顺序
s
{40,50,20,25,30}
s.add(25) #集合中已经有25,该操作被忽略
s
{40,50,20,25,30}
s.update((30,70)) #自动忽略重复的元素
s
{70,40,50,20,25,30}
(2) pop()、remove()、discard()
s.discard(50) #删除59
s
{70,40,20,25,30}
s.discard(3) #集合中没有3,该操作被忽略
s
{70,40,20,25,30}
s.remove(3) #使用remove()方法会抛出异常
Traceback(most recent call last):
File "<pyshell#61>",line 1,in <module>
s.remove(3)
KeyError:3
s.pop() #随机弹出并删除一个元素
70
s
{40,20,25,30}
集合运算
a_set = set([8,9, 10 11, 12,13])
b_set ={0,1,2,3,7,8}
a_set l b_set #并集,返回新集合
#自动忽略重复元素
{0,1,2,3,7,8,9,10,11,12,13}
a_set & b_set #交集
{8}
a_set - b_set #差集
{9,10,11,12,13}
a_set ^ b_set #对称差集
{0,1,2,3,7,9,10,11,12,13}
{1,2,3}<{1,2,3,4} #第一个集合是第二个集合的真子集
True
{1,3,2}<={1,2,3} #第一个集合是第二个集合的子集
True
{1,2,5}>{1,2,4} #第二个集合不是第一个集合的子集
False
内置函数对集合的操作
x={1,8,30,2,5}
x #集合元素的存储顺序和写入顺序不一样
{1,2,5,8,30}
len(x) #返回元素个数
5
max(x) #返回最大值
30
sum(x) #所有元素之和
46
sorted(x) #内置函数sorted()总是返回列表
[1,2,5,8,30]
list(map(str,x))
['1','2','5','8','30']
list(filter(lambda item:item%5==0,x)) #支持filter()函数,保留能被5整除的数
[5,30]
list(enumerate(x)) #支持enumerate()函数
[(0,1),(1,2),(2,5),(3,8),(4,30)]
all(x) #检查是否所有元素都等价于True
True
any(x) #检查是否有元素等价于True
True
list(zip(x)) #支持zip()函数
[(1,),(2,),(5,),(8,),(30,)]
list(reversed(x)) #不支持reversed()函数
Traceback (most recent call last):
File "<pyshell#56>",line 1, in <module>
list(reversed(x))
TypeError:'set'object is not reversible