【引言】如果想从任何其他数据集合中快速消除重复,集合就非常适用。如果主要操作是查找,使用集合就比使用相应的列表要快的多。因为列表总是完成速度很慢的顺序搜索,所以对于查找,集合往往是首选的数据结构。
1.集合的概念
- 在python中,集合是一种很方便的数据结构,可以用来保存相关对象的一个集合。同时确保其中的任何对象不会重复。
- 集合还允许完成并及、交集和差集等操作。
- 与列表和字典类似,集合可以根据需要扩展和收缩。类似字典,集合是无序的。
集合(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)))