Python学习笔记(十)—— Set

代码及内容源自《Fluent Python》——Luciano Ramalho 著

set 是一个不重复元素的集合,它的一个基本的应用就是去除重复:

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

set支持集合的基本操作,如 a | b返回并集,a & b返回交集,a - b返回差集。有效利用set的集合运算,能够帮助缩短代码,提高可读性。

例如,现在有一个较大的email地址集(haystack)和一个较小的地址集(needles),我们需要统计needles中有多少也属于haystack。由于有了set,我们可以用一行简单的代码来实现这个目的:

found = len(set(needles) & set(haystack))

作为比较,如果不用集合运算,而用通常的方法,则代码如下:

found = 0
for n in needles:
    for n in haystack:
        found += 1

在Python3中,set的标准字符串表达形式为{…},但是空集表示为set():

>>> s = {1}
>>> type(s)
set
>>> s
{1}
>>> s.pop()
1
>>> s
set()

使用如{1,2,3}的方式来创建set,与调用构造函数set([1,2,3])相比,速度更快,可读性更高。因为对后者来说,Python需要先获取set对应的构造函数、再创建一个list,然后把list传递到构造函数当中。而前者只需要调用一个特殊的二进制代码BUILD_SET。

对于frozenset,只能通过调用构造函数来创建:

>>> frozenset(range(10))
frozenset({0, 1, 2, 3, 4, 5, 6, 7, 8, 9})

set comprehension在Python 2.7中被加入:

>>> from unicodedata import name
>>> {chr(i) for i in range(32,256) if 'SIGN' in name(chr(i),'')}
{'#','$','%','+','<','=','>','¢','£','¤','¥','§','©','¬','®','°','±','µ','¶','×','÷'}

由于使用了hash table,dict和set的速度很快,键值搜索的效率很高。具体的性能和原因可参见原书p85-p93。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值