集合是一种可迭代的、无序的、不能包含重复元素的数据结构。与序列相比,序列中的元素是有序的,可以重复出现,而集合中的元素是无序且不能有重复元素。
序列强调的是有序,集合强调的是不重复。当不考虑顺序,且没有重复元素时,序列和集合可以互相转换。
集合又可分为可变集合(set)和不可变集合(frozenset)
可变集合
可变集合可以插入和删除元素
创建可变集合
方法一:使用 {} 将元素括起来,元素之间用逗号分隔
方法二:使用set()函数
输入下面代码
a = {'张三','李四','王五'} #创建一个可变集合方法一
print(a)
print(type(a))
b = {'张三','李四','王五','王五'} #当有重复元素时,创建会自动剔除重复元素
print(len(b))
print(b)
c = set((1,2,3,4)) #创建一个可变集合方法二
print(c)
d = {}
print(type(d)) #若创建一个空的 {} ,其类型为字典
e = set()
print(type(e)) #要创建一个空集合用set()
代码运行结果
{'王五', '张三', '李四'}
<class 'set'>
3
{'王五', '张三', '李四'}
{1, 2, 3, 4}
<class 'dict'>
<class 'set'>
修改可变集合
修改可变集合的常用方法如下表格
函数 | 描述 |
---|---|
add(element) | 添加元素,如果元素已经存在,则不能添加,不会抛出错误 |
remove(element) | 删除元素,如果元素不存在,则抛出错误 |
discard(element) | 删除元素,如果元素不存在,不会抛出错误 |
pop() | 删除返回集合中任意一个元素,返回值是删除的元素 |
clear() | 清除集合中所有元素 |
输入下面代码
a = {'张三','李四','王五'} #创建一个可变集合
a.add('赵六') #使用add函数添加元素,由于集合是无序的,因此添加的元素# 并不会按照“末尾添加”
print(a)
a.remove('赵六') #使用remove删除元素
print(a)
a.discard('王五') #使用discard删除元素
print(a)
b = a.pop() #使用pop删除元素并获取被删除的元素赋给变量b并打印出来
print(b)
print(a)
c = set((1,2,3,4,5))
print(c)
c.clear() #使用clear清除所有元素
print(len(c))
代码运行结果
{'张三', '李四', '赵六', '王五'}
{'张三', '李四', '王五'}
{'张三', '李四'}
张三
{'李四'}
{1, 2, 3, 4, 5}
0
遍历集合
集合是无序的,虽然没有索引,但是可以通过遍历集合,访问集合每个元素,一般使用 for循环
输入下面代码
a = {'张三','李四','王五'} #创建一个可变集合
for i in a:print(i)
print("------------")
for i ,item in enumerate(a):print('{0}---{1}'.format(i,item))
代码运行结果
张三
王五
李四
------------
0---张三
1---王五
2---李四
注意:虽然第二个for循环使用了enumerate()函数,但是此处的变量 i 不是索引,而是遍历集合的次数
不可变集合
创建不可变集合用frozenset()函数,因为集合也是可迭代对象,因此也可以用元组作为frozenset()的参数
输入下面代码
a = frozenset({1,2,3,4,5})
print(a)
print(type(a))
b = (1,2,3,4,5,6)
c = frozenset(b)
print(c)
print(type(c))
代码运行结果
frozenset({1, 2, 3, 4, 5})
<class 'frozenset'>
frozenset({1, 2, 3, 4, 5, 6})
<class 'frozenset'>
集合推导式
与列表推导式类似,只是输出结果过滤掉重复元素的集合
输入下面代码
a = {x*10 for x in range(10)}
print(a)
print(type(a))
b = [2,3,2,5,4,5]
c = [x ** 2 for x in b] #使用列表推导式,可以看到所有元素
print(c)
d = {x **2 for x in b} #使用集合推导式,可以看到结果集合中过滤掉了重复元素
print(d)
代码运行结果
{0, 70, 40, 10, 80, 50, 20, 90, 60, 30}
<class 'set'>
[4, 9, 4, 25, 16, 25]
{16, 9, 4, 25}