python set去重时间复杂度_python内置数据结构之set

set定义,初始化set() -> new empty set object

set(iterable) -> new set object

注意:

定义set时,可用{}来表示,但不能为空

如下:

>>> type({})      # '{}'表示定义的是dict

>>> type({1})

set方法

增add(elem)

添加一个元素至set

update(*others)

将可迭代对象添加至set

删remove(elem)

删除set中指定的元素,如果找不到抛出KeyError

discard(elem)

删除set中指定的元素,如果找不到,就什么都不做

pop() --> elem

随机弹出set中某元素,并输出至标准输出

如果找不到抛出KeyError

clear()

清空set内所有元素

问: 为什么抛出的异常是KeyError,而不是ValueError?

说明set是通过Key来查询值是否存在,而不是通过value的对比.

查非线性结构,无法索引

改修改,还不如直接删除,再增一个新元素

set成员运算符比较比较set和list查询效率:

lst1 = list(range(100))

lst2 = list(range(1000000))

-1 in lst1、-1 in lst2     # 使用此语句测试效率

s1 = set(range(100))

s2 = set(range(1000000))

-1 in s1、-1 in s2         # 使用此语句测试效率

测试结果:

list相差数量级的倍数

set相差无几

set和线性结构线性结构在查询效率方面,查询的数据的量级越大,所消耗的时间则会越多.

set、dict等,内部使用hash作为key,在查询上时间复杂度为O(1).即查询时间,跟数据量级无关.

可hash对象

整型

字符型

tuple

None

bytes(保存的是对应的字符编码)

使用内置的hash()函数来判断此对象是否是可hash的.

例:

>>> hash([1])          # 列表不可hash

Traceback (most recent call last):

File "", line 1, in 

TypeError: unhashable type: 'list'

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值