距离上次写这本书的笔记已经50天了,既然决定要学完,无论如何也要践行到底,这也是对我学习新知的一种考验,既来之,则安之,闲话少叙,直接开始正题。这一节的概念是:集合 set
集合(Set)这个容器类型与列表不同,
1 集合不包含重合元素,
2 集合是无序的,其又分为两种,Set,可变的,Frozen Set,不可变的。
创建集合
用花括号 {} 把元素括起来,用 , 把元素隔开
见如下示例:
primes = {2, 3, 5, 7, 11, 13, 17}
primes
注意:创建空集合的时候,必须用 set(),而不能用 {}:
from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all"
a = {} # 注意这样创建的是一个 dict(字典),而不是 set 集合
b = set() # 这样创建的才是空集合
type(a)
type(b)
dict
set
操作
将序列类型数据转换成 Set,就等于去重。可以用 in 来判断某个元素是否属于这个集合。len()、max()、min(),也都可以用来操作 Set,而去除某个元素不能用del —— 因为 Set 中的元素没有索引(它不是有序容器)。从 Set 里删除元素,得用 set.remove(elem);而 Frozen Set 是不可变的,所以不能用 set.remove(elem) 操作。
对于集合,有相应的操作符可以对它们进行集合运算:
并集:|
交集:&
差集:-
对称差集:^
事实上,每种数据结构(Data Structures和 “容器”,其实是指同一事物的两种称呼)都有自己的应用场景。当我们需要管理很多用户时,集合就可以派上很大用场。
假定两个集合中有些人是 admins,有些人是 moderators:
admins={'Moose','Joker','Joker'} moderators={'Ann','Chris','Jane','Moose','Zero'}
那么:
admins = {'Moose', 'Joker', 'Joker'}
moderators = {'Ann', 'Chris', 'Jane', 'Moose', 'Zero'}
admins # 去重自动完成
'Joker' in admins # Joker 是否是 admins?
'Joker' in moderators # Joker 是否是 moderator?
admins | moderators # admins、moderator,或者身兼两职的,即,两个角色中的所有人 in admins or moderators or both
admins & moderators # 既是 admins 又是 moderator 的都有谁?in both admins and moderators
admins - moderators # 是 admins 但不是 moderator 的都有谁?in admins but not in moderators
admins ^ moderators # admins 和 moderator 中不是身兼两职的都有谁?in admins or moderator but not both
运行结果如下:
{'Joker', 'Moose'}
True
False
{'Ann', 'Chris', 'Jane', 'Joker', 'Moose', 'Zero'}
{'Moose'}:
{'Joker'}
{'Ann', 'Chris', 'Jane', 'Joker', 'Zero'}
集合图示及操作符如下:
概念是学习新知的重要基础,只有深刻理解对应的学科概念,才能顺利推进学习进度,三次理解不了,就学五次,五次不行,就学十次,直到搞懂为止。
网友评论