js set去重对象_python基础篇:很有意思的数据类型,集合(set) 常用去去重

Python集合(set),是一个很有意思的数据结构。从形式上看,它像字典有key但没有value,它的写法是这样的s = {'a', 'b', 'c'},是不是像一个没有value的字典?另一方面,它又像是一个用花括号替换了方括号的列表,但它不能像列表那样用索引访问元素。

2e01ecade5bd491cb1fcfa99891019d5

集合最常用的特性是元素不能重复,所以常用于去重。

1 li=[1,2,3,4,5,1,2,3]2 li=list(set(li))3 print(li)li=[1,2,3,4,5]

其实,Python集合在内部实现上就是一个没有value的字典,所以它跟字典很像。既然和字典很像,那么还要集合干什么?集合主要用来干什么呢?

集合主要用于测试一个对象是不是在一堆对象集里面,也就是in运算。这个功能其实列表也可以,比如1 in [2,3,4,5],但是用列表的速度远远低于集合,尤其是在这一堆对象的数量非常大时。

列表因为是顺序存储的,它的查找时间复杂度是O(n),而集合是用hash table实现的,其时间复杂度是O(1)。

9d213e5aea614d38b9d3bcd588aa49ac

Python集合(set)的创建

集合可以通过set()来创建一个空集合,也可以把一个列表转换为集合。类似字典那样在花括号内可以放用逗号,隔开的多个对象:

667ffdd7d7564291be7f8cb9b797d2d8

跟字典的键不能是可变对象一样,集合里面也不能是列表、集合、字典:

c053a586a63c4b2480469dfac354e354

Python集合(set)的访问

集合不能像列表那样通过索引访问内部某一个元素,只能通过遍历访问全部元素,或通过变量名访问整个集合:

635cfa6874e94a7b95f8543f580a923b

集合相关的内置函数

Python内置了一些函数可以用于操作集合,它们是:

  1. len()
  2. 返回集合的长度,即集合包含的元素的个数。空集合的长度是0
ebf58a9361ce4b7bb52789c24fabcc41
  1. any()和all()
  2. 类似于对列表、tuple的操作。
  3. any(): 只要集合有一个元素为True则返回True;
  4. all(): 只有集合的所有元素都为True才返回True;
dd8d2425fc74418fa1848d861e593a8e

跟空字典一样,它却认为是所有元素都为True,all(set())返回True。

  1. sorted()
  2. 跟操作列表、tuple的效果一样,它把集合的所有元素进行排序
f29eb59534d64624b9c0cd67ace5dc96

in 运算符

跟列表,元组一样,in用来检验一个对象是不是在集合中:

45c0b071611b4cba89f54a07e8798cb1

集合的内置方法:

(1)add(x)

把对象x添加到集合中。

3cc5e4162550426683595461f258d8f5

(2)update()

把多个对象添加到集合中。

238e94310bfe4e5188eb0a5132d31a99

(3)discard(x) 和 remove(x)

这两个都是从集合中删除一个元素x。不同的是,如果x不在集合中,discard()会忽略;而remove()会抛出KeyError的错误:

c945096881c64cceaa92cd1c00ed83f1

(4)pop()

类似字典的pop()和列表的pop(),都是从其中删除一个元素并返回该元素。因为集合没有key和索引的概念,所以集合的pop()不带参数。

(5)clear()

清空一个集合

(6)copy()

跟字典的copy()一样,返回一个集合的深拷贝。

1d2658f326054d069e9196619ba6f50e

(7)union()

求两个或多个集合的并集,即把这些集合的所有元素放在一起组成新的集合并返回。它不改变原来的集合。

b2da0985eb414f41b55e67942bd5bf69

(8)intersection()

求两个或多个集合的交集,即把这些集合中共同含有的元素放在一起组合成新的集合并返回。同样它也不改变原来的集合。

0be2581b945144e9aa46874a75eed723

(10)difference()

求一个集合S与另一个或多个集合的差集,即把只包含在集合S却不在做比较的集合中的元素组成新的集合并返回,同样它也不改变原来的集合。相当于集合的减法。

c40e92dfde1543919f75607073497786

总结

集合是没有了value的字典,但它也有自己的个性。

练习

  1. 熟悉对集合的各种操作。
  2. 想一想集合可以和日常生活中哪些场景联系起来。

如果你觉得本文对你的学习有帮助的话,不妨点个赞呗。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值