Python3之集合set

Python3之集合set

##需求场景
我们需要存放一组数据,但是不希望存放重复的数据!用户的账号!

集合

通过哈希(hash)算法在一个容器中存放多个没有顺序的不可以重复的数据。【无序、不重复】

List特点:元素有放入顺序,元素可重复。
Set特点:元素无放入顺序,元素不可重复(注意:元素虽然无放入顺序,但是元素在set中的位置是有该元素的HashCode决定的,其位置其实是固定的。

例:链表和哈希表的区别。
如果你学过数据结构,你就知道链表的特性,list是一种链表
set是哈希表,通过哈希值来存取,所以理论上的存取时间复杂度是O(1)

去重原理

set的去重是通过两个函数__hash__和__eq__结合实现的。
1、当两个变量的哈希值不相同时,就认为这两个变量是不同的;
2、当两个变量哈希值一样时,调用__eq__方法,当返回值为True时认为这两个变量是同一个,应该去除一个。返回FALSE时,不去重。

声明

  • set()方式
  • {}方式
s1 = set()  <classset>
s2 = {“a”}   <classset>
s3 = {}  <classdict>  # 此方法声明的是字典类型

>>> thisset = set(("Google", "Runoob", "Taobao"))
>>> type(thisset)
<class 'set'>
>>> thisset
{'Taobao', 'Google', 'Runoob'}
>>>

常见的操作函数

增加

  • 'add’增加单个数据,无返回值。
>>> a = {1, 2, 3}
>>> a.add(5)
>>> a
{1, 2, 3, 5}
>>>
>>> a.add(7,8)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: add() takes exactly one argument (2 given)
>>>
  • update(x),添加多个数据,无返回值。

s.update( {“字符串”} ) 将字符串添加到集合中。s.update( “字符串” ) 将字符串拆分单个字符后,然后再一个个添加到集合中,有重复的会忽略。

>>> thisset
{'Taobao', 'Google', 'Runoob'}
>>>
>>> thisset.update(('Taobao', 1, 2))
>>> thisset
{1, 2, 'Google', 'Runoob', 'Taobao'}

>>> a = thisset.update(3)  # 无法添加单个数据
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'int' object is not iterable
>>>

>>>> a = thisset.update('a', 'b')
>>> thisset
{1, 2, 'Google', 'Runoob', 'a', 'b', 'Taobao'}
>>>
>>>

add和update
集合add方法:是把要传入的元素做为一个整个添加到集合中;集合update方法:是把要传入的元素拆分,做为个体传入到集合中。

>>>a = set('boy')
>>>a
{'b', 'o', 'y'}
>>>a.add('girl')
>>>a
{'girl', 'b', 'o', 'y'}
>>>a.update('the')
>>>a
{'h', 'y', 'o', 'girl', 'e', 'b', 't'}

清空集合

  • 'clear’清空
>>> a
{1, 2, 3, 5, 9}
>>>
>>> a.clear() # 清空集合
>>> a
set()	# 集合为空
>>>

删除

  • 'pop’随机删除一个,返回删除的元素
  • remove(x)指定删除某个数据,不存在报错,无返回值。
  • discard(x)删除某个数据,不存在不报错,无返回值。
>>> a
{'h', 'y', 'o', 'girl', 'e', 'b', 't'}
>>> a.pop()
'h'
>>> a
{'y', 'o', 'girl', 'e', 'b', 't'}
>>> a.remove('y')
>>> a
{'o', 'girl', 'e', 'b', 't'}
>>> 
>>> 
>>> a.remove('aa')
Traceback (most recent call last):
  File "<input>", line 1, in <module>
KeyError: 'aa'
>>> a.discard('aa')
>>> a.discard('o')
>>> a
{'girl', 'e', 'b', 't'}
>>> 

其它

  • 'copy’复制
  • 'difference’两个集合之间求差集
  • 'difference_update’求差集并且用不一样的数据重新给自己赋值
  • 'intersection_update’求交集并给自己赋值
  • 'union’求并集, 'update’求并集并给自己赋值。

集合:python中内置的组合数据类型之一,set表示储多个没有顺序的不可以重复的数据;通过hash算法让添加的数据不重复[剔重]!

set的操作函数

>>> dir(set)
['__and__', '__class__', '__contains__',
'__eq__','__gt__', '__hash__','__iand__',
'__init__', '__isub__','__lt__', '__ne__',
'__new__', '__or__','__repr__',
'__ror__', '__rsub__', '__rxor__',
'add','difference_update', 'discard',
'intersection', 'issuperset', 'pop',
'remove','symmetric_difference_update',
'union', 'update']
>>>

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值