为了账号安全,请及时绑定邮箱和手机立即绑定

Python集与列表

Python集与列表

侃侃尔雅 2019-09-19 16:23:50
在Python中,哪种数据结构更有效/更快?假设顺序对我来说并不重要,无论如何我会检查重复项,Python设置是否比Python列表慢?
查看完整描述

3 回答

?
慕姐4208626

TA贡献1852条经验 获得超7个赞

这取决于你打算用它做什么。


在确定对象是否存在于集合中时(如在x in s)中,集合明显更快,但在迭代其内容时比列表慢。


您可以使用timeit模块查看哪种情况更快。


查看完整回答
反对 回复 2019-09-19
?
达令说

TA贡献1821条经验 获得超6个赞

当您只想迭代值时,列表比设置略快。


但是,如果要检查项目是否包含在内,则集合明显快于列表。但它们只能包含唯一的项目。


事实证明,元组的表现几乎与列表完全相同,除了它们的不变性。


迭代


>>> def iter_test(iterable):

...     for i in iterable:

...         pass

...

>>> from timeit import timeit

>>> timeit(

...     "iter_test(iterable)",

...     setup="from __main__ import iter_test; iterable = set(range(10000))",

...     number=100000)

12.666952133178711

>>> timeit(

...     "iter_test(iterable)",

...     setup="from __main__ import iter_test; iterable = list(range(10000))",

...     number=100000)

9.917098999023438

>>> timeit(

...     "iter_test(iterable)",

...     setup="from __main__ import iter_test; iterable = tuple(range(10000))",

...     number=100000)

9.865639209747314

确定对象是否存在


>>> def in_test(iterable):

...     for i in range(1000):

...         if i in iterable:

...             pass

...

>>> from timeit import timeit

>>> timeit(

...     "in_test(iterable)",

...     setup="from __main__ import in_test; iterable = set(range(1000))",

...     number=10000)

0.5591847896575928

>>> timeit(

...     "in_test(iterable)",

...     setup="from __main__ import in_test; iterable = list(range(1000))",

...     number=10000)

50.18339991569519

>>> timeit(

...     "in_test(iterable)",

...     setup="from __main__ import in_test; iterable = tuple(range(1000))",

...     number=10000)

51.597304821014404


查看完整回答
反对 回复 2019-09-19
?
杨__羊羊

TA贡献1943条经验 获得超7个赞

清单表现:


>>> import timeit

>>> timeit.timeit(stmt='10**6 in a', setup='a = range(10**6)', number=100000)

0.008128150348026608

设定表现:


>>> timeit.timeit(stmt='10**6 in a', setup='a = set(range(10**6))', number=100000)

0.005674857488571661

您可能需要考虑元组,因为它们与列表类似但无法修改。它们占用的内存略少,访问速度更快。它们不像列表那样灵活,但效率更高。它们的正常用途是作为字典键。


集合也是序列结构,但与列表和元组有两个不同。虽然集合确实有订单,但该顺序是任意的,不受程序员的控制。第二个区别是集合中的元素必须是唯一的。


set根据定义。[ python | 维基 ]。


>>> x = set([1, 1, 2, 2, 3, 3])

>>> x

{1, 2, 3}


查看完整回答
反对 回复 2019-09-19
  • 3 回答
  • 0 关注
  • 556 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信