Python集与列表

在Python中,哪种数据结构更有效/更快?假设顺序对我来说并不重要,无论如何我会检查重复项,Python设置是否比Python列表慢?



侃侃尔雅
浏览 559回答 3
3回答

慕姐4208626

这取决于你打算用它做什么。在确定对象是否存在于集合中时(如在x in s)中,集合明显更快,但在迭代其内容时比列表慢。您可以使用timeit模块查看哪种情况更快。

达令说

当您只想迭代值时,列表比设置略快。但是,如果要检查项目是否包含在内,则集合明显快于列表。但它们只能包含唯一的项目。事实证明,元组的表现几乎与列表完全相同,除了它们的不变性。迭代>>> 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

杨__羊羊

清单表现:>>> 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}
打开App,查看更多内容
随时随地看视频慕课网APP