开发者社区> 技术mix呢> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

Python Set Literals

简介:
+关注继续查看

现有3种方式创建set()

复制代码
>>> def f():
...     return set([1, 2, 3])
... 
>>> def h():
...     return set((1, 2, 3))
... 
>>> def g():  #set Literals
...     return {1, 2, 3}

>>> f()
set([1, 2, 3])
>>> h()
set([1, 2, 3])
>>> g()
set([1, 2, 3])
复制代码

效率对比

复制代码
>>> import timeit
>>> min(timeit.repeat(f))
0.675529956817627
>>> min(timeit.repeat(h))
0.5531120300292969
>>> min(timeit.repeat(g))
0.35515809059143066
复制代码

对比结果

可见set Literals完胜

原理

为了了解其中的原因,分析下生成set()的原理

复制代码
>>> dis.dis(f)
  2           0 LOAD_GLOBAL              0 (set)
              3 LOAD_CONST               1 (1)
              6 LOAD_CONST               2 (2)
              9 LOAD_CONST               3 (3)
             12 BUILD_LIST               3
             15 CALL_FUNCTION            1
             18 RETURN_VALUE        
>>> dis.dis(h)
  2           0 LOAD_GLOBAL              0 (set)
              3 LOAD_CONST               4 ((1, 2, 3))
              6 CALL_FUNCTION            1
              9 RETURN_VALUE        
>>> dis.dis(g)
  2           0 LOAD_CONST               1 (1)
              3 LOAD_CONST               2 (2)
              6 LOAD_CONST               3 (3)
              9 BUILD_SET                3
             12 RETURN_VALUE 
复制代码

分析

f()需要载入全局函数set,把三个元素放入栈中,然后调用set()函数,就生成了set()

h()也需要载入全局函数set,不是把三个元素载入栈,而是把一个元组常量放入栈,然后调用set()函数,就生成了set()

g()是直接把三个元素放入栈,然后就生成了set()

总结

尽管这里生成set()的方式对性能的提升很小,set literals不用花费时间调用函数处理中间数据,并且这种写法是非常漂亮的,所以建议用set literals的方式

 





本文转自jihite博客园博客,原文链接:http://www.cnblogs.com/kaituorensheng/p/6139573.html,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Python刷题系列(5)_set集合(下)
set 是一个不允许内容重复的组合,而且set里的内容位置是无序的,所以不能用索引列出。可进行关系测试,删除重复数据,还可以计算交集、差集、并集等。
24 0
Python刷题系列(5)_set集合(上)
set 是一个不允许内容重复的组合,而且set里的内容位置是无序的,所以不能用索引列出。可进行关系测试,删除重复数据,还可以计算交集、差集、并集等。
64 0
Python - 基础数据类型 set 集合
Python - 基础数据类型 set 集合
23 0
python set集合的基本运算
冻结的集合 一般的集合set都是可原处修改的集合。还有一种集合,不能在原处修改。 这种集合的创建方法是: frozenset("hiekay") >>> f_set = frozenset("hiekay") #看这个名字就知道了frozen,...
930 0
12.5、python基础数据类型(set集合)
基础数据类型(set集合) 认识集合   由一个或多个确定的元素所构成的整体叫做集合。   集合中的元素有三个特征:     1.确定性(集合中的元素必须是确定的)     2.互异性(集合中的元素互不相同。
779 0
Python的set集合详解
     Python 还包含了一个数据类型 —— set (集合)。集合是一个无序不重复元素的集。基本功能包括关系测试和消除重复元素。集合对象还支持 union(联合),intersection(交),difference(差)和 sysmmetric difference(对称差集)等数学运算。
1991 0
认识python中的set集合及其用法
python中,集合(set)是一个无序排列,可哈希, 支持集合关系测试,不支持索引和切片操作,没有特定语法格式, 只能通过工厂函数创建.集合里不会出现两个相同的元素, 所以集合常用来对字符串或元组或列表中的元素进行去重操作。
879 0
+关注
2968
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载