首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如果不在列表中,则为list.append和set.add性能

如果不在列表中,则为list.append和set.add性能
EN

Stack Overflow用户
提问于 2017-01-04 06:20:39
回答 1查看 10.4K关注 0票数 5

哪一个更有表现力,在Python中渐近复杂性(或者它们是等价的)是什么?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
set.add(12)

if 12 not in somelist:
    somelist.append(12)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-04 06:30:07

一般来说,这套节目要快得多。列表中成员资格的测试是O(n),与列表的大小成线性关系。添加到集合中的是O(1),与列表中的项目数无关。除此之外,列表代码执行两个函数调用:一个用于检查列表中是否有12个函数,另一个用于添加它,而set操作只执行一个调用。

注意,列表解决方案可以是快速的,但是,当项目不需要添加到列表中,因为它是在列表的早期找到的。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# Add item to set
$ python -m timeit -s 's = set(range(100))' 's.add(101)'
10000000 loops, best of 3: 0.0619 usec per loop

# Add item not found in list
$ python -m timeit -s 'l = list(range(100))' 'if 101 not in l: l.append(101)'
1000000 loops, best of 3: 1.23 usec per loop

# "Add" item found early in list
$ python -m timeit -s 'l = list(range(100))' 'if 0 not in l: l.append(0)'
10000000 loops, best of 3: 0.0214 usec per loop

# "Add" item found at the end of the list
$ python -m timeit -s 'l = list(range(102))' 'if 101 not in l: l.append(101)'
1000000 loops, best of 3: 1.24 usec per loop
票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41466070

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文