集合python有相同元素报错_Python集合

1. 简介

math?formula=%5Ccolor%7Bgreen%7D%7B%E4%BB%80%E4%B9%88%E6%98%AF%E9%9B%86%E5%90%88%EF%BC%9A%7D

集合是Python中的内置数据结构

集合可被看做是没有value的字典

math?formula=%5Ccolor%7Bgrey%7D%7B%E9%9B%86%E5%90%88%E7%9A%84%E7%89%B9%E7%82%B9%EF%BC%9A%7D

集合元素是无序的

集合元素不能重复

集合是可变的

集合允许数学运算

集合是分散存储的

2. 集合的创建

math?formula=%5Ccolor%7Bgreen%7D%7B%E7%9B%B4%E6%8E%A5%E5%88%9B%E5%BB%BA%EF%BC%9A%7D

集合名 = {元素, 元素, 元素}

集合就是没有value的字典,创建方法与字典相同

math?formula=%5Ccolor%7Bblue%7D%7B%E7%A4%BA%E4%BE%8B%EF%BC%9A%7D

# 创建前与创建后的元素排列顺序是不同的

>>> college1 = {"哲学", "经济学", "法学", "教育学"}

>>> print(college1)

{'教育学', '哲学', '经济学', '法学'}

# 不能使用{}创建空集合

>>> set1 = {}

>>> print(set1, type(set1))

{}

创建空集合不能使用 集合 = {} 形式,因为这是创建空字典,创建空集合要使用函数 set()

math?formula=%5Ccolor%7Bgreen%7D%7B%E5%88%A9%E7%94%A8%E5%87%BD%E6%95%B0%E5%88%9B%E5%BB%BA%EF%BC%9A%7D

函数:set()

用法:集合名 = set(参数)

函数 set()将已有的其它类型数据转换为集合,其中,数据类型可以是:列表、元组、字典、字符串、数字序列等 注意:转换字典为集合时,只会保留字典的key

math?formula=%5Ccolor%7Bblue%7D%7B%E7%A4%BA%E4%BE%8B%EF%BC%9A%7D

# 创建一个空集合

>>> set1 = set()

>>> print(set1, type(set1))

set()

# 转换列表为集合

>>> college2 = set(["哲学", "经济学", "金融学", "文学", "历史学"])

>>> print(college2)

{'哲学', '历史学', '金融学', '文学', '经济学'}

# 转换字符串为集合

>>> s2 = set("中华人民共和国")

>>> print(s2)

{'华', '民', '和', '共', '人', '国', '中'}

3. 操作集合元素

3.1 查和改

math?formula=%5Ccolor%7Bred%7D%7B%E6%B3%A8%E6%84%8F%EF%BC%9A%7D

查:集合是无序的,不支持索引取值

改:集合不支持更新操作,只能 先删除再创建

3.2 增

math?formula=%5Ccolor%7Bgreen%7D%7B%E5%A2%9E%E5%8A%A0%E5%8D%95%E4%B8%AA%E5%85%83%E7%B4%A0%EF%BC%9A%7D

函数:add()

用法:集合.add(元素)

元素存在则忽略,没有则新增,一次只能添加一个元素

math?formula=%5Ccolor%7Bblue%7D%7B%E7%A4%BA%E4%BE%8B%EF%BC%9A%7D

>>> college1 = {"哲学", "经济学", "法学", "教育学"}

>>> college1.add("计算机学")

>>> print(college1)

{'哲学', '法学', '计算机学', '教育学', '经济学'}

math?formula=%5Ccolor%7Bgreen%7D%7B%E5%A4%9A%E4%B8%AA%E5%85%83%E7%B4%A0%E5%A2%9E%E5%8A%A0%EF%BC%9A%7D

函数:update()

用法:集合.update(列表/元组)

参数可以是列表或者元组

math?formula=%5Ccolor%7Bblue%7D%7B%E7%A4%BA%E4%BE%8B%EF%BC%9A%7D

# 参数是列表

>>> college1 = {"哲学", "经济学", "法学", "教育学"}

>>> college1.update(["生物学", "工程学", "计算机学"])

>>> print(college1)

{'哲学', '法学', '工程学', '计算机学', '生物学', '教育学', '经济学'}

# 参数是元组

>>> college1 = {"哲学", "经济学", "法学", "教育学"}

>>> t1 = ("生物学", "工程学", "计算机学")

>>> college1.update(t1)

>>> print(college1)

{'哲学', '法学', '工程学', '计算机学', '生物学', '教育学', '经济学'}

3.3 删

math?formula=%5Ccolor%7Bgreen%7D%7B%E6%96%B9%E6%B3%951%EF%BC%9A%7D

函数:remove()

用法:集合.remove(元素)

如果删除不存在的元素会报错

# 先删后增,就相当于改

>>> college1 = {"哲学", "经济学", "法学", "教育学"}

>>> college1.remove("教育学")

>>> college1.add("医学")

>>> print(college1)

{'哲学', '法学', '医学', '经济学'}

math?formula=%5Ccolor%7Bgreen%7D%7B%E6%96%B9%E6%B3%952%EF%BC%9A%7D

函数:discard

用法:集合.discard(元素)

静默删除,当要删除的元素不存在时亦不报错

math?formula=%5Ccolor%7Bblue%7D%7B%E7%A4%BA%E4%BE%8B%EF%BC%9A%7D

>>> college1 = {"哲学", "经济学", "法学", "教育学"}

>>> college1.discard("哲学")

>>> print(college1)

{'教育学', '经济学', '法学'}

3.4 集合的遍历

math?formula=%5Ccolor%7Bgreen%7D%7B%E6%96%B9%E6%B3%95%EF%BC%9A%7D

for..in 集合:

math?formula=%5Ccolor%7Bblue%7D%7B%E7%A4%BA%E4%BE%8B%EF%BC%9A%7D

# 每次执行循环后的结果顺序都不相同

college1 = {"哲学", "经济学", "法学", "教育学"}

for i in college1:

print(i)

-- run --

法学

教育学

哲学

经济学

3.5 判断集合元素存在与否

math?formula=%5Ccolor%7Bgreen%7D%7B%E6%88%90%E5%91%98%E8%BF%90%E7%AE%97%E7%AC%A6%EF%BC%9A%7D

是否存在:元素 in 集合

是否不存在:元素 not in 集合

in 存在返回 True,不存在返回 False

not in 则相反

math?formula=%5Ccolor%7Bblue%7D%7B%E7%A4%BA%E4%BE%8B%EF%BC%9A%7D

>>> college1 = {"哲学", "经济学", "法学", "教育学"}

>>> print("哲学" in college1)

True

>>> print("计算机学" not in college1)

True

4. 集合的运算

4.1 交集

math?formula=%5Ccolor%7Bgreen%7D%7B%E6%9F%A5%E7%9C%8B%EF%BC%9A%7D

函数:intersection()

用法:集合1.intersection(集合2)

获取两个集合间都存在的元素

math?formula=%5Ccolor%7Bcyan%7D%7B%E6%9B%B4%E6%96%B0%EF%BC%9A%7D

函数:intersection_updata()

用法:集合1.intersection_updata(集合2)

将交集结果覆盖写入集合1

也可以直接用 集合 = 交集结果 的方式来更新原集合

math?formula=%5Ccolor%7Bblue%7D%7B%E7%A4%BA%E4%BE%8B%EF%BC%9A%7D

>>> college1 = {"哲学", "经济学", "法学", "教育学"}

>>> college2 = {'哲学', '历史学', '金融学', '文学', '经济学'}

# 查看交集结果

>>> college3 = college1.intersection(college2)

>>> print(college3)

{'哲学', '经济学'}

# 将结果写入集合1

>>> college1.intersection_update(college2)

>>> print(college1)

{'哲学', '经济学'}

4.2 并集

math?formula=%5Ccolor%7Bgreen%7D%7B%E6%9F%A5%E7%9C%8B%EF%BC%9A%7D

函数:union()

用法:集合1.union(集合2)

将两个集合进行合并,去重,形成的一个新的完整的集合

并集中没有更新原集合的函数,不过可以用赋值 集合 = 并集结果 的方式来更新原集合

math?formula=%5Ccolor%7Bblue%7D%7B%E7%A4%BA%E4%BE%8B%EF%BC%9A%7D

>>> college1 = {"哲学", "经济学", "法学", "教育学"}

>>> college2 = {'哲学', '历史学', '金融学', '文学', '经济学'}

# 查看并集结果

>>> college3 = college1.union(college2)

>>> print(college3)

{'哲学', '法学', '历史学', '金融学', '教育学', '文学', '经济学'}

# 利用赋值将并集结果更新至集合1

>>> college1 = college1.union(college2)

>>> print(college1)

{'哲学', '法学', '历史学', '金融学', '教育学', '文学', '经济学'}

4.3 差集

math?formula=%5Ccolor%7Bgreen%7D%7B%E6%9F%A5%E7%9C%8B%E5%8D%95%E5%90%91%E5%B7%AE%E9%9B%86%EF%BC%9A%7D

函数:difference()

用法:集合1.difference(集合2)

获取集合1在集合2中不存在的部分

两个集合的前后顺序不同,结果也将不同

math?formula=%5Ccolor%7Bcyan%7D%7B%E6%9B%B4%E6%96%B0%EF%BC%9A%7D

函数:difference_updata()

用法:集合1.difference_updata(集合2)

将单向差集结果更新至集合1

math?formula=%5Ccolor%7Bblue%7D%7B%E5%8D%95%E5%90%91%E5%B7%AE%E9%9B%86%E7%A4%BA%E4%BE%8B%EF%BC%9A%7D

>>> college1 = {"哲学", "经济学", "法学", "教育学"}

>>> college2 = {'哲学', '历史学', '金融学', '文学', '经济学'}

# 集合顺序影响结果

>>> college3 = college1.difference(college2)

>>> print(college3)

{'教育学', '法学'}

>>> college3 = college2.difference(college1)

>>> print(college3)

{'历史学', '文学', '金融学'}

# 将单向差集结果更新至集合1

>>> college1.difference_update(college2)

>>> print(college1)

{'法学', '教育学'}

math?formula=%5Ccolor%7Bgreen%7D%7B%E6%9F%A5%E7%9C%8B%E5%8F%8C%E5%90%91%E5%B7%AE%E9%9B%86%EF%BC%9A%7D

函数:symmetric_difference()

用法:集合1.difference_difference(集合2)

将两个集合在对方集合中不存在的部分整合成一个新集合

math?formula=%5Ccolor%7Bcyan%7D%7B%E6%9B%B4%E6%96%B0%EF%BC%9A%7D

函数:symmetric_difference_update()

用法:集合1.symmetric_difference_update(集合2)

将双向差集结果更新至集合1

math?formula=%5Ccolor%7Bblue%7D%7B%E5%8F%8C%E5%90%91%E5%B7%AE%E9%9B%86%E7%A4%BA%E4%BE%8B%EF%BC%9A%7D

>>> college1 = {"哲学", "经济学", "法学", "教育学"}

>>> college2 = {'哲学', '历史学', '金融学', '文学', '经济学'}

# 查看双向差集结果

>>> college3 = college1.symmetric_difference(college2)

>>> print(college3)

{'金融学', '法学', '历史学', '教育学', '文学'}

# 将双向差集结果更新至集合1

>>> print(college1)

{'法学', '历史学', '金融学', '教育学', '文学'}

5. 集合的关系判断

5.1 相等与否判断

math?formula=%5Ccolor%7Bgreen%7D%7B%E6%AF%94%E8%BE%83%E8%BF%90%E7%AE%97%E7%AC%A6%EF%BC%9A%7D

相同判断:==

不同判断:!=

比较运算符 == 表示两个集合的元素完全相同则返回 True ,不同返回 False

!= 则相反

math?formula=%5Ccolor%7Bblue%7D%7B%E7%A4%BA%E4%BE%8B%EF%BC%9A%7D

>>> s1 = {1, 2, 3, 4, 5, 6}

>>> s2 = {6, 5, 4, 3, 2, 1}

>>> print(s1 == s2)

True

>>> s1 = {1, 2, 3, 4, 5, 6}

>>> s2 = {1, 2, 3, 4, 5, 6, 7}

>>> print(s1 == s2)

False

5.2 子集判断

math?formula=%5Ccolor%7Bgreen%7D%7B%E6%96%B9%E6%B3%95%EF%BC%9A%7D

函数:issubset()

用法:集合1.issubset(集合2)

*判断集合1是否是集合2的子集(解释:如果集合2里包含了集合1的所有元素,那么集合1就是集合2的子集,集合2是集合1的父集)

是子集返回 True ,不是返回 False

math?formula=%5Ccolor%7Bblue%7D%7B%E7%A4%BA%E4%BE%8B%EF%BC%9A%7D

# s1是s2的子集

>>> s1 = {4, 5, 6, 7}

>>> s2 = {1, 2, 3, 4, 5, 6, 7, 8}

>>> print(s1.issubset(s2))

True

# s3不是s4的子集

>>> s3 = {4, 5, 6, 7, 10}

>>> s4 = {1, 2, 3, 4, 5, 6, 7, 8}

>>> print(s3.issubset(s4))

False

5.3 父集判断

math?formula=%5Ccolor%7Bgreen%7D%7B%E6%96%B9%E6%B3%95%EF%BC%9A%7D

函数:issuperset()

用法:集合1.issuperset(集合2)

判断集合1是否为集合2的父集

是父集返回 True ,不是返回 False

math?formula=%5Ccolor%7Bblue%7D%7B%E7%A4%BA%E4%BE%8B%EF%BC%9A%7D

# s2不是s1的父集

>>> s1 = {4, 5, 6, 7, 10}

>>> s2 = {1, 2, 3, 4, 5, 6, 7, 8}

>>> print(s2.issuperset(s1))

False

# s4是s3的父集

>>> s3 = {4, 5, 6, 7}

>>> s4 = {1, 2, 3, 4, 5, 6, 7, 8}

>>> print(s4.issuperset(s3))

True

5.4 重复元素判断

math?formula=%5Ccolor%7Bgreen%7D%7B%E6%96%B9%E6%B3%95%EF%BC%9A%7D

函数:isdisjoint()

用法:集合1.isdisjoint(集合2)

判断两个集合是否存在重复元素

存在相同元素返回 False 没有相同元素则返回 True

math?formula=%5Ccolor%7Bblue%7D%7B%E7%A4%BA%E4%BE%8B%EF%BC%9A%7D

# 存在相同元素

>>> s1 = {5}

>>> s2 = {1, 3, 5, 7, 9}

>>> print(s1.isdisjoint(s2))

False

# 不存在相同元素

>>> s3 = {6}

>>> s4 = {1, 3, 5, 7, 9}

>>> print(s3.isdisjoint(s4))

True

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值