流畅的Python第三章总结

流畅的Python

第三章总结

  1. 字典推导
>>> a = [(86, 'China'), (91, 'india')]
>>> b = {code: contry for code,contry in a}
>>> b
{86: 'China', 91: 'india'}
>>> { code : contry for code, contry in b.items()}
{86: 'China', 91: 'india'}

以元组形式items()返回dict的所有键值对。

  1. 使用setfault处理找不到的键

当字典dic[k]不能找到正确的键的时候,python会抛出异常,通常可以使用dic.get(k, default)来代替d[k],当找不到键时,可以返回一个默认值,但是却不能改变字典的值,可以使用setfault来处理。

dict.setfault(key, []).append(new_value)

就等于

if key not in dict:
	dict[key] = []
dict[key].append(new_value)
  1. 集合论

集合可用于去重

>>> l = ['spam', 'spam', 'eggs', 'spam']
>>> set(l)
{'spam', 'eggs'}
>>> list(set(l))
['spam', 'eggs']

a和b是两个集合,a|b返回是它们的合集,a&b返回的是它们的交集,a-b返回它们的差集。

found = len(needles & haystack)

找到needles有多少个元素在haystack。

set.intersection(set1, set2 ... etc)
set.union(set1, set2 ... etc)

intersection()返回一个集合set和set1,set2…的交集,set必须为集合,set1,set2为可迭代对象即可。
union()返回一个集合set和set1,set2…的合集,set必须为集合,set1,set2为可迭代对象即可。

>>> a = [1, 2, 3]
>>> b = [3, 4, 5]
>>> set(a).intersection(b)
{3}
>>> a.intersection(b)
Traceback (most recent call last):
  File "<pyshell#3>", line 1, in <module>
    a.intersection(b)
AttributeError: 'list' object has no attribute 'intersection'

创建空集合需使用set(),如果使用 a = {},创建的是一个空字典。

  1. 集合的数学运算
运算符特殊方法
s & z__and__
s &= z__iadd__
s | z__or__
s |= z__ior__
s - z__sub__
s -= z__isub__
s ^ z__xor__
s ^= z__ixor__(对称差集,即不属于A&B的元素的集合)
s.isdisjoint(z)查看s和z是否不相交
s in zz.__contains__(s)
s <= zs.__le__(z)(s是否为z的子集)
s.issubset(z)s是否为z的子集,z为可迭代对象
s < zs.__lt__(z)(s是否为z的真子集)
s >= zs.__ge__(z)(s是否为z的父集)
s.issuperset(z)s是否为z的父集,z为可迭代对象
s > zs.__gt__(z)(s是否为z的真父集)
s.add(e)把元素e添加到s中
s.clear()移除s中的所有元素
s.copy()对s进行浅复制
s.disard(e)如果s里有e这个元素的话,把他移除
s.__iter__()返回s的迭代器
s.__len()__len(s)
s.pop()从s中移除一个元素并返回它的值,若s为空,则抛出KeyError异常
s.remove(e)从s中移除e元素,若e元素不存在,则抛出KeyError异常
  1. 集合和字典的效率远远高于列表。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值