《自学是门手艺》读书笔记(16)

2020-03-14  本文已影响0人  专注执行

距离上次写这本书的笔记已经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'}

集合图示及操作符如下:

集合概念理解图例

概念是学习新知的重要基础,只有深刻理解对应的学科概念,才能顺利推进学习进度,三次理解不了,就学五次,五次不行,就学十次,直到搞懂为止。

上一篇 下一篇

猜你喜欢

热点阅读