【python】10_内置数据结构——集合

【引言】如果想从任何其他数据集合中快速消除重复,集合就非常适用。如果主要操作是查找,使用集合就比使用相应的列表要快的多。因为列表总是完成速度很慢的顺序搜索,所以对于查找,集合往往是首选的数据结构。

1.集合的概念

  1. 在python中,集合是一种很方便的数据结构,可以用来保存相关对象的一个集合。同时确保其中的任何对象不会重复。
  2. 集合还允许完成并及、交集和差集等操作。
  3. 与列表和字典类似,集合可以根据需要扩展和收缩。类似字典,集合是无序的。

集合(set)是一个无序的不重复元素序列。1,2,3,4,1,2,3 = 1,2,3,4
集合的创建:
1). 使用大括号 { } 或者 set() 函数创建集合;
2). 注意:

  • 创建一个空集合必须用 set() 而不是 { }
  • { } 是用来创建一个空字典。
    在这里插入图片描述

在这里插入图片描述
【注意1】
如何定义一个空集合?
在这里插入图片描述
虽然集合是用{ }表示,但注意这里定义一个空集合切不可用{ }定义,这种情况下是一个空字典。
一定要用以下这种方式:
在这里插入图片描述
【注意2】
集合里面不能存储可变的数据类型列表; 定义不成功;
在这里插入图片描述
这里集合里面包含一个list类型,定义不成功,报错。

2.集合的特性

集合支持的特性只有成员操作符(索引 切片 重复 连接均不支持)
在这里插入图片描述
for循环
在这里插入图片描述
for + index
在这里插入图片描述

3.集合的常用方法

可变数据类型(添加顺序和在集合中存储的顺序不同)
1.增加
add添加一个元素到集合里面
在这里插入图片描述
update添加多个元素到集合中
在这里插入图片描述
2.删除(集合里面没有索引、切片等特性)
pop随机删除集合元素
在这里插入图片描述

remove删除指定的元素, 如果元素不存在, 则报错
在这里插入图片描述
discard删除指定的元素, 如果元素不存在, 则什么也不做
在这里插入图片描述
可以看到,集合中并没有12,但是我们删除12时,也没有报错。

3.数学操作:
在这里插入图片描述
a.并集
在这里插入图片描述
b.交集
在这里插入图片描述
c.差集
可以理解为s1中有哪些s2中没有的元素 s1-(s1&s2)
可以理解为s2中有哪些s1中没有的元素 s2-(s1&s2)
在这里插入图片描述
d.对等差分:并集-交集
在这里插入图片描述
e.子集
在这里插入图片描述
f.超集
在这里插入图片描述
g.两个集合是不是不相交
在这里插入图片描述
在这里插入图片描述

4.集合的应用案例:列表去重

在抓取页面图片时,为避免重复抓取,将抓取的img结果(结果集是list类型的)通过集合去重。
方法一: 依次遍历并判断

li = [1,2,3,4,1,2,23]
li_re = []
for item in li:
    if item not in li_re:
        li_re.append(item)
print(li_re)

在这里插入图片描述

urls = [
    'http://www.baidu.com',
    'http://www.qq.com',
    'http://www.qq.com',
    'http://www.163.com',
    'http://www.csdn.com',
    'http://www.csdn.com',
]

# 用来存储去重的url地址
analyze_urls = []

# 依次遍历所有的url
for url in urls:
    # 如果url不是analyze_urls列表成员, 则追加到列表最后。
    # 如果url是analyze_urls列表成员,不做任何操作。
    if url not in analyze_urls:
        analyze_urls.append(url)
print("去重之后的url地址: ", analyze_urls)

在这里插入图片描述

方法二: 通过set方法进行处理
在这里插入图片描述

urls = [
    'http://www.baidu.com',
    'http://www.qq.com',
    'http://www.qq.com',
    'http://www.163.com',
    'http://www.csdn.com',
    'http://www.csdn.com',
]

print("去重之后的url地址: ",set(urls))

在这里插入图片描述

5.集合的应用案例:判断是否有重复元素

nums = [1, 2, 3, 4, 2]
# 存在重复元素: 判断nums的长度和去重之后的长度是否一致,
#       如果不一致, 则有重复的元素, 返回True
#       如果一致, 则没有重复的元素, 返回False
print(len(nums) != len(set(nums)))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值