note_Set

回顾:字典特点:

1.key是唯一的.
2.key必须是可以哈希的(不可变数据类型:字符串,元组,数值)
3.key是无序的.
3.6中dict的元素有序是解释器的特点,不是python源码的特点.
xxx.py
Cpython -> 有序
Jpython -> 无序

集合:set

实际上就是一种特殊的字典.
所有value都是None的字典,就是集合.

对比字典和集合的特点:

字典 集合

字典 集合
key唯一 元素唯一
key可以哈希 元素可以哈希
key无序 元素无序

Key唯一 元素唯一
Key可以哈希 元素可以哈希
Key无序 元素无序

如何获取集合?

1.手动创建集合.
1.创建空集合
d = {}
创建空集合,只有一种方式:调用set函数.
S = set()

2.创建带元素集合

S = {1,2,3}
从可迭代对象中(字符串,列表,元组,字典)创建集合.

s = set(‘abc’)
S = set([1,2,3])
S = set((1,2,3))
S = set({‘name’:’Andy’,’age’:10})

2.通过方法调用

-> str
-> list
-> set

集合的操作:

查看集合可用的方法:


[x for x in dir(set) if not x.startswith(‘_’)]

['add', 'clear', 'copy', 'difference', 'difference_update', 'discard', 'intersection', 'intersection_update', 'isdisjoint', 'issubset', 'issuperset', 'pop', 'remove', 'symmetric_difference', 'symmetric_difference_update', 'union', 'update']

add:如果元素存在,没有做任何动作.

删:

Pop() 		:依次从集合中弹出一个元素,如果集合为空,报错
Discard(ele)	:从集合中删除指定的元素,如果不存在,什么都不执行
Remove(ele)	:从集合中删除指定的元素,如果不存在,报错
Clear()		:清空

集合的四大常用操作:

并集:union
交集:intersection
差集:difference
对称差:symmetric_difference

symmetric_difference ^

改(更新) ####:

Update	:用二者的并集更新当前集合
difference_update:用二者的差集更新当前集合
intersection_update:用二者的交集更新当前集合
symmetric_difference_update:用二者的对称差集更新当前集合

判断功能:

Isdisjoint:判断两个集合是否没有交集
Issubset:判断当前集合是否是后者的子集
Issuperset:判断后者是否是当前集合的子集

集合基本没有单独取其中元素的需求.

集合的使用场景:

1.判断一个元素是否在指定的范围之内.
2.方便数学上的集合操作.
并,交,差,对称差
有简化写法:
并:|
交:&
差:-
对称差:^

3.对序列数据类型中的重复元素进行去重

如果想遍历集合中的元素.
通常用for循环.

frozenset:冻结的集合

最大的特点:不可变.


['copy', 'difference', 'intersection', 'isdisjoint', 'issubset', 'issuperset', 'symmetric_difference', 'union']

少了添加,更新的方法.

s = frozenset()
s = frozenset('abcabc')
s = frozenset([1,2,3])
s = frozenset((1,2,3))
s = frozenset({'name':'Andy','age':10})

集合的四大方法:并,交,差,对称差.
set,frozenset是否可以混用?
可以!

总结:
如果两种数据类型混用,方法的主调者的类型决定了最终结果的类型.

frozenset应用场景:

凡是使用到不可改变的数据的场景,都是可以使用frozenset的.

set集合的元素:必须是可以哈希的,set本身不是可以哈希.
但是frozenset是不可变的数据.(可以哈希的),它是可以放到集合中.

set和frozenset可以互相转换.

posted @ 2019-03-07 19:55  yangchangjie  阅读(247)  评论(0编辑  收藏  举报