python中的集合去重

一、集合的定义

1、集合的表示

(1)、set()

空集合用set()表示

s1 = set()
print(type(s1), s1)
# <class 'set'> set()

set()其中的内容要使用可迭代的形式

若其中的内容为字典则只保留键

s3 = set(range(10))
print(type(s3), s3)
# <class 'set'> {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
s4 = set("hello world")
print(type(s4), s4)
# <class 'set'> {'w', 'o', 'l', 'r', ' ', 'd', 'h', 'e'}
s5 = set([1, 6, 4, 7, 9, 10])
print((type(s5)), s5)
# <class 'set'> {1, 4, 6, 7, 9, 10}
# 集合只保留字典中的键,舍去值
s0 = set({'name': 'David', 'age': 18})
print(type(s0), s0)
# <class 'set'> {'age', 'name'}
(2)、{  , , , }

{}中可以添加多个元素

s2 = {1, 2, 4, 'a', 'b', 'hello'}
print(type(s2), s2)
# <class 'set'> {'a', 1, 2, 'hello', 4, 'b'}

2、集合中的元素不重复,统计的个数为不重复的个数

应用于去重的场景

s6 = set('12356552335232')
print(type(s6), s6)
# <class 'set'> {'1', '2', '3', '6', '5'}

3、集合中元素无序

注意不是升序或降序

s7 = set(['g', 'a', 'l', 'x', 'w'])
print(type(s7), s7)
# <class 'set'> {'a', 'w', 'l', 'x', 'g'}

二、集合的元素类型

集合中的元素类型为不可变的数据类型

不可变的数据类型有五种基本数据类型,以及元组。

s0 = {True, 10, 3.14, 'hello', None, ('a', 1,)}
print(type(s0), s0)
# <class 'set'> {True, 3.14, 'hello', 10, None, ('a', 1)}

三、集合的遍历

集合没有顺序不能使用下标索引,只能遍历其中元素

for e in s0:
    print(e)

四、集合的用法

1、len():求长度,只统计不重复元素个数

print(len(s0))
# 6
s1 = {2, 3, 4, 5, 6, 7, 5, 3, 4, 3, }
print(len(s1))
# 6

2、 in:判断某个元素是否在集合中

print(10 in s0, 'ok' in s0)
# True False

3、添加

(1)、add(): 向集合中添加一个元素
s1 = {1, 2, 3, 4, 5}
s1.add(6)
print(s1)
s1.add(range(10))
print(s1)
# {1, 2, 3, 4, 5, 6}
# {1, 2, 3, 4, 5, 6, range(0, 10)}
 (2)、update({}、[]、""):合并集合到新集合中

没有返回值,其中的内容需要为可迭代的

print(s1.update({9}))
s1.update([9])
print(s1)
# None
# {1, 2, 3, 4, 5, 6, range(0, 10), 9}

4、删除

(1)、remove():删除指定元素

无返回值,不存在报错;只能传入一个参数

print(s1.remove(3))
print(s1)
# None
# {2, 4, 5, 6, range(0, 10), 9}
(2)、pop():删除集合中的任意一个元素

有返回值,不可传入参数

print(s1.pop())
(3)、discard():忽略

无返回值 ;如果有则删除,没有则不报错

print(s1.discard(4))
print(s1)
# None
# {2, 5, 6, range(0, 10), 9}
(4)、clear():清空
s1.clear()

五、交并查补的应用

1、交集

交集:都有[你有我也有]

方法一&; 方法二intersection

# s0.intersection_update(s1)    求交集后更改s0,无返回值
s3 = s1 & s2
# s3 = s1.intersection(s2)
print(s1, s2, s3)
# {1, 2, 3, 4, 5} {2, 3, 4, 6} {2, 3, 4}

2、并集:所有【你我所有的】

方法一|;方法二 union

# s3 = s1 | s2
s3 = s1.union(s2)
print(s1, s2, s3)
# {1, 2, 3, 4, 5} {2, 3, 4, 6} {1, 2, 3, 4, 5, 6}

3、差集:一方有另一方没有

方法一- ;方法二difference

s3 = s1.difference(s2)
# s3 = s1 - s2
print(s3)
# {1, 5}

4、补集(全集):全集中没有的

(在全集中,第一个没有的加上第二个没有的)

方法一-;方法二symmetric_difference()

s3 = s1.symmetric_difference(s2)
print(s3)
# {1, 5, 6}
issubset():判断是否为子集
issuperset():判断是否为超集 
s4 = {1, 2, 3, 4, 5, 6}
print(s1.issuperset(s4))
print(s1.issubset(s4))
# False
# True

六、集合的推导式

1、推导式的作用及目的

推导式:可以从一个数据序列构建另一个新的数据序列的结构体。

目的:快速编写对应的数据类型

2、推导式的结构

[第一部分表达式 第二部分for循环 第三部分条件]
[ 表达式 for循环 if条件]
每个元素 个数 满足条件后,执行表达式

第二部分的次数是在列表中添加元素的次数
第二部分不限于数字索引,也可以是迭代的形式(如字典中的键值)
第一部分是添加的元素。表达式不限于形式,可以是任意类型(如数字,字符串,bool)
第一部分如果要和字符串拼接需要把变量转换为字符串的形式(如str(i))
第三部分是满足的条件

3、集合的推导式的实战

创建2~19的集合,显示第几个:

s = {"第" + str(i) + "个" for i in range(20) if i > 1}
print(s)
# {'第2个', '第6个', '第14个', '第12个', '第18个', '第3个', '第5个', 
# '第15个', '第17个', '第11个', '第4个', '第7个', '第9个', '第10个', 
# '第13个', '第8个', '第16个', '第19个'}

  • 9
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值