Python数据结构——集合(详细版)

发布于:2024-06-13 ⋅ 阅读:(159) ⋅ 点赞:(0)

集合是一种可迭代的、无序的、不能包含重复元素的数据结构。与序列相比,序列中的元素是有序的,可以重复出现,而集合中的元素是无序且不能有重复元素。

序列强调的是有序,集合强调的是不重复。当不考虑顺序,且没有重复元素时,序列和集合可以互相转换。

集合又可分为可变集合(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}

网站公告

今日签到

点亮在社区的每一天
去签到