29期第三周笔记

Week 3

本周学习主要内容包括IPython,集合,字典,封装和解构

IPython

特殊变量

  • _表示前一次输出
  • __表示倒数第二次输出
  • ___表示倒数第三次输出
  • _dh 目录历史
  • _oh 输出历史

Shell命令

  • 使用 !command 执行shell命令

魔术方法

  • %: linemagic
  • %%:cellmagic

集合(Set)

性质:
  1. !!集合是可变的,无序的,不重复的元素的集合,是非线性数据结构之一!!
  2. 可哈希类型 (数值型int、float、complex;布尔型True、False;字符串string、bytes;tuple;None。以上都是不可变类型,哈希类型,hashable)
    不可哈希类型(list,bytearray,set
    不管嵌套多少次,内部不能有不可哈希类型,否则集合创建过程中报错
  3. 去重性:{‘a’,‘b’,‘c’,‘d’,‘d’} => {‘a’, ‘b’, ‘c’, ‘d’}
  4. 无序性:{‘a’,‘b’,‘c’,‘d’,‘d’} => {‘a’, ‘c’, ‘d’, ‘b’,‘d’}
    因为无序,不可索引
  5. 可迭代:set中虽然元素不一样,但所有元素都可以迭代出来
  6. 可遍历(for循环即可,且遍历也无序),增加,移除,但不可修改

增加:

  • add:直接添加值,且就地修改
  • update:update可以放入可迭代对象,且就地修改
  • 集合有集合运算,不能用+

移除:

  • remove(elem):元素值移除,无返回值就地修改,非常好,set非线性,remove效率极高 O(1),背后原理与hash有关

与线性数据结构的remove区别:

s.remove('e') #KeyError 你给的key我找不到,key在计算机中指唯一不重复的值 O(1)
[].remove('a') #ValueError 就是你给的值我找不到,遍历
  • discard(elem):弃用,更温和;有就移除,没有也不报错,效率极高O(1)
  • clear():全部清空
  • pop:随机弹出 / 集合无序

遍历:

  • in操作符在列表中效率高吗?–不高,相当于做index或finde,从前向后找,时间复杂度O(n)。
    set类型中效率高吗?–高,用key,时间复杂度O(1)

  • 如果内存中有线程列表,你需要做的操作里面用到了遍历,O(n),n规模越大效率越低下,微秒 => 毫秒。index、count
  • 如果内存中有集合,不管数据规模多大,他检索元素的时间不随规模增大,时间复杂度O(1),效率极高,纳秒级。key、in
  • 比如:100万个url,可以用类似集合方式检索;频繁搜索建议使用set

概念:

  • 全集
  • 子集subset / 超集superset
  • 真子集 / 真超集
  • 集合运算:并集 、交集、 差集

|:并集
^:对称差集
-:差集 (a-b != b-a)
&:交集

字典(Dict)

初始化:

dict() -> new empty dictionary
dict(mapping) -> new dictionary initialized from a mapping object's
    (key, value) pairs
dict(iterable) -> new dictionary initialized as if via:
    d = {}
    for k, v in iterable:
        d[k] = v
dict(**kwargs) -> new dictionary initialized with the name=value pairs
    in the keyword argument list.  For example:  dict(one=1, two=2)

元素访问:

  • d.fromkeys
  • d.setdefault
  • d.get

删除:

  • pop
  • popoitem
  • clear

遍历:

  • keys:返回一个类set对象,可以看成一个set,具有去重性,且无序,可以进行集合运算。
  • values:values()不能保证唯一,不一定能hash,values方法返回可迭代对象,不是类set对象。
  • items:items()如果所有values值可hash,那么items就是kv对,items()返回对象是类set对象。
  • 以上三种都返回一个类似生成器的可迭代对象,Dictionary view对象(惰性),可以使用len(), iter(),in操作,而且不会产生副本(实时更新反映变化)。

key:

字典的key和set的元素要求一致

  • set元素可以看作key,set可以看作dict的简化版
  • hashable可哈希才可以做key,可以使用hash()测试
  • 使用可以访问就如set中使用index,时间复杂度都是O(1),也是最好的访问元素方式

有序性:

字典元素是按照key’的hash值无需储存的!!

python 3 中字典在3.6开始记录kv中k的录入序,但不表示key是排序。set集合key没有记录这个顺序,不要依赖记录的顺序,你还是认为字典中kv对是无序的,set一定是无序的。
如果一定需要这种有序可以使用OrderedDict。

封装和解构(packaing/unpacking)

解构:

  • 右边只要是可迭代对象即可,可以线性或非线性结构
  • 左边标识符与右边值要相等
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值