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

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

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

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

集合的删除

语法格式如下

del 集合名

集合类型的操作符

1、A&B:获取集合A和B的交集

2、A|B:获取集合A和B的并集

3、A-B:获取在集合A中不在集合B中的元素

4、A^B:获取集合A和B的补集,即在集合A和B中的元素去掉集合A和B共有的元素

示例代码如下

A = {i for i in range(1,10)}
B = {5,6,7,12,13,14}
print(A)
print(B)
print('接下来执行集合操作')
print(A&B)
print(A|B)
print(A-B)
print(A^B)

代码运行结果

{1, 2, 3, 4, 5, 6, 7, 8, 9}
{5, 6, 7, 12, 13, 14}
接下来执行集合操作
{5, 6, 7}
{1, 2, 3, 4, 5, 6, 7, 8, 9, 12, 13, 14}
{1, 2, 3, 4, 8, 9}
{1, 2, 3, 4, 8, 9, 12, 13, 14}

Process finished with exit code 0

集合的相关操作方法

方法名描述
s.add(x)如果x不在集合s中,则将x添加到集合s
s.remove(x)如果x在集合中,则将其删除,如果不在集合中,程序报错
s.clear()清除集合中所有的元素

示例代码如下

A = {i for i in range(1,10)}
print(A)
A.add(66)
print(A)
A.remove(1)
print(A)
A.clear()
print(A,type(A))

代码运行结果

{1, 2, 3, 4, 5, 6, 7, 8, 9}
{1, 2, 3, 4, 5, 6, 7, 8, 9, 66}
{2, 3, 4, 5, 6, 7, 8, 9, 66}
set() <class 'set'>

Process finished with exit code 0

集合推导式

与列表推导式类似,只是输出结果过滤掉重复元素的集合。

输入下面代码

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}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

邂逅自己

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值